运行环境:.net 6+IIS
功能接口:上传图片,图片大小在300k左右
异常现象:部分图片可以正常上传,部分图片上传时直接报500错误。我从事件查看器里看到这个异常信息,入下图所示。
做过的尝试:我将同样的网站代码部署到另一台服务器上,一切正常。
我的疑问:为何部分图片可以正常上传,部分图片不可以?为何另一台服务器就一切正常,有没有什么不确定因素?最关键的问题是,我该如何解决?
.net 6+IIS 上传图片,部分图片上传出险500错误
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 陈悕 上午好☀️☀️☀️️
本答案参考ChatGPT-3.5根据您提供的错误信息,问题出现在上传部分图片时,由于内存流(MemoryStream)不可扩展导致了500错误。在.NET中,如果创建MemoryStream时没有指定可扩容选项,那么它的容量就不能动态增加。当尝试写入的数据量超过了其当前容量时,就会抛出“NotSupportedException”。
解决方案:
-
修改图片读取和上传方式:
- 确保在处理上传图片时,使用可扩容的MemoryStream。
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配置:
- 虽然这个问题主要在于代码层面,但如果IIS对请求实体大小有限制,也可能造成此问题。请确认IIS的请求限制是否足够容纳上传的所有图片,可以在web.config中调整如下设置:
<system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="104857600" /> <!-- 设置为适合您的值,例如:100MB --> </requestFiltering> </security> </system.webServer>
通过上述排查和解决步骤,应能有效解决因MemoryStream不可扩容引发的上传图片异常问题。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报-
悬赏问题
- ¥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 云桌面水印如何添加