无法访问已关闭的文件

时间:2013-03-05 21:46:11

标签: asp.net file-upload

我有一个ASP.NET FileUpload控件可以正常工作,直到我部署它。然后它工作正常,除非文件超过~55kb。我认为这与回发有关,我必须把它放在会话变量中。不过,它适用于小文件。

是否可以限制会话变量的大小?但是从我的IDE运行时它可以工作,所以不确定。

System.ObjectDisposedException:无法访问已关闭的文件

感谢任何线索。

2 个答案:

答案 0 :(得分:7)

这可以通过在web.config中提供DiskBufferSize来解决:

<system.web>
    <httpRuntime executionTimeout="90" maxRequestLength="20000" useFullyQualifiedRedirectUrl="false" requestLengthDiskThreshold="8192"/>
</system.web>

Cannot access a closed file

答案 1 :(得分:2)

我做了一些测试,似乎设置DiskBufferSize是通过禁用缓冲来解决问题的。现在计算机将使用更多内存。现在缓冲被有效禁用。你从中获得的性能提升已经消失。

我认为正确的解决方法是使用SaveAs方法将发布的文件保存到FIRST回发的临时文件夹中,并将文件路径存储到viewstate或session中的临时文件。

在任何额外的回发或重定向之后,特别是如果涉及异步线程,如果需要缓冲,则SaveAs功能不起作用;您将收到错误“无法访问已关闭的文件”。

我不知道你在'session变量'中放了什么,但我猜它是文件控件,这就是问题所在。

这解决了我的问题,以防其他人遇到这个问题,但又不想禁用缓冲。