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

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

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

img

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 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日