我有一个ASP.NET FileUpload控件可以正常工作,直到我部署它。然后它工作正常,除非文件超过~55kb。我认为这与回发有关,我必须把它放在会话变量中。不过,它适用于小文件。
是否可以限制会话变量的大小?但是从我的IDE运行时它可以工作,所以不确定。
System.ObjectDisposedException:无法访问已关闭的文件
感谢任何线索。
答案 0 :(得分:7)
这可以通过在web.config中提供DiskBufferSize来解决:
<system.web>
<httpRuntime executionTimeout="90" maxRequestLength="20000" useFullyQualifiedRedirectUrl="false" requestLengthDiskThreshold="8192"/>
</system.web>
答案 1 :(得分:2)
我做了一些测试,似乎设置DiskBufferSize是通过禁用缓冲来解决问题的。现在计算机将使用更多内存。现在缓冲被有效禁用。你从中获得的性能提升已经消失。
我认为正确的解决方法是使用SaveAs方法将发布的文件保存到FIRST回发的临时文件夹中,并将文件路径存储到viewstate或session中的临时文件。
在任何额外的回发或重定向之后,特别是如果涉及异步线程,如果需要缓冲,则SaveAs功能不起作用;您将收到错误“无法访问已关闭的文件”。
我不知道你在'session变量'中放了什么,但我猜它是文件控件,这就是问题所在。
这解决了我的问题,以防其他人遇到这个问题,但又不想禁用缓冲。