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

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

陈悕 上午好☀️☀️☀️️
本答案参考ChatGPT-3.5
根据您提供的错误信息,问题出现在上传部分图片时,由于内存流(MemoryStream)不可扩展导致了500错误。在.NET中,如果创建MemoryStream时没有指定可扩容选项,那么它的容量就不能动态增加。当尝试写入的数据量超过了其当前容量时,就会抛出“NotSupportedException”。
解决方案:
修改图片读取和上传方式:
using (var memoryStream = new MemoryStream(capacity: initialCapacity, writable: true, publiclyVisible: true))
{
// 将图片数据写入到memoryStream中
await file.CopyToAsync(memoryStream);
// 进行后续处理和上传操作...
}
优化内存管理:
检查代码逻辑:
ZR.Admin.WebApi.Extensions.HttpContextExtension.GetRequestValue(HttpContext context)中的相关代码,确保在处理上传图片时正确地初始化和使用MemoryStream。调整IIS配置:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600" /> <!-- 设置为适合您的值,例如:100MB -->
</requestFiltering>
</security>
</system.webServer>
通过上述排查和解决步骤,应能有效解决因MemoryStream不可扩容引发的上传图片异常问题。