陈悕 2024-03-09 11:40 采纳率: 50%
浏览 3
已结题

.net 6+IIS 上传图片,部分图片上传出险500错误

运行环境:.net 6+IIS
功能接口:上传图片,图片大小在300k左右
异常现象:部分图片可以正常上传,部分图片上传时直接报500错误。我从事件查看器里看到这个异常信息,入下图所示。
做过的尝试:我将同样的网站代码部署到另一台服务器上,一切正常。
我的疑问:为何部分图片可以正常上传,部分图片不可以?为何另一台服务器就一切正常,有没有什么不确定因素?最关键的问题是,我该如何解决?

img

  • 写回答

2条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 2024-03-09 11:41
    关注

    陈悕 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    根据您提供的错误信息,问题出现在上传部分图片时,由于内存流(MemoryStream)不可扩展导致了500错误。在.NET中,如果创建MemoryStream时没有指定可扩容选项,那么它的容量就不能动态增加。当尝试写入的数据量超过了其当前容量时,就会抛出“NotSupportedException”。

    解决方案:

    1. 修改图片读取和上传方式

      • 确保在处理上传图片时,使用可扩容的MemoryStream。
      using (var memoryStream = new MemoryStream(capacity: initialCapacity, writable: true, publiclyVisible: true))
      {
          // 将图片数据写入到memoryStream中
          await file.CopyToAsync(memoryStream);
          // 进行后续处理和上传操作...
      }
      
    2. 优化内存管理

      • 在处理大文件上传时,可以考虑分块读取并上传,避免一次性加载整个文件到内存中。
    3. 检查代码逻辑

      • 检查ZR.Admin.WebApi.Extensions.HttpContextExtension.GetRequestValue(HttpContext context)中的相关代码,确保在处理上传图片时正确地初始化和使用MemoryStream。
    4. 调整IIS配置

      • 虽然这个问题主要在于代码层面,但如果IIS对请求实体大小有限制,也可能造成此问题。请确认IIS的请求限制是否足够容纳上传的所有图片,可以在web.config中调整如下设置:
      <system.webServer>
          <security>
              <requestFiltering>
                  <requestLimits maxAllowedContentLength="104857600" /> <!-- 设置为适合您的值,例如:100MB -->
              </requestFiltering>
          </security>
      </system.webServer>
      

    通过上述排查和解决步骤,应能有效解决因MemoryStream不可扩容引发的上传图片异常问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月17日
  • 已采纳回答 3月9日
  • 修改了问题 3月9日
  • 创建了问题 3月9日

悬赏问题

  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加