从会话中获取文件时出现“无法访问已关闭的文件”错误消息

Posted

技术标签:

【中文标题】从会话中获取文件时出现“无法访问已关闭的文件”错误消息【英文标题】:Getting "Cannot access a closed file" errormessage when getting file from session 【发布时间】:2013-12-26 09:47:13 【问题描述】:

我有一个 asp.net FileUpload 控件。 我可以成功上传文件以存储在会话中,但是当我试图获取它的输入流时 (我将文件存储在 HttpPosterFile 中)我收到错误

无法访问已关闭的文件

tr.PostedFile //<== HttpPostedFile; 
byte[] byteArray = null; 
using (var binaryReader = new BinaryReader(tr.PostedFile.InputStream)) 
 
    byteArray = binaryReader.ReadBytes(tr.PostedFile.ContentLength); 

【问题讨论】:

将文件数据的字节数组存储在会话中而不是使用流中的 HttpPostedFile 不是更好吗? 【参考方案1】:

你用过using吗?

如果是,请注意在将字符串放入输入流之前不要关闭它。

【讨论】:

tr.PostedFile 【参考方案2】:

将此添加到您的 web.config 文件中

<system.web>
  <httpRuntime useFullyQualifiedRedirectUrl="true" maxRequestLength="15360" requestLengthDiskThreshold="15360"/>
</system.web>

http://sanjaysainitech.blogspot.com/2008/12/file-upload-error-can-not-access-closed.html

【讨论】:

在 web.config 中设置 RequestLengthDiskThreshold(设置为任何值,最大为 MaxRequestSize)可以解决问题。显然 ASP.Net 缓冲输入流的第一块,然后将流视为关闭。如果您设置 MaxRequestLength(例如 1536)但让 RequestLengthDiskThreshold 默认设置,则可能会发生这种情况。这显然会绊倒一些内部代码,这使其成为 Microsoft 错误。设置这两个值可以解决问题。

以上是关于从会话中获取文件时出现“无法访问已关闭的文件”错误消息的主要内容,如果未能解决你的问题,请参考以下文章

运行 Oracle 调度程序时出现错误:ORA-20001:必须从应用程序会话中调用此过程

使用 Flask 中的会话传递变量时出现键错误

从python中的.h5文件获取帧时出现Unicode错误

从文件/rdd 读取数据时出现 Unicode 错误

从api流明获取数据时出现错误的非法字符串偏移[重复]

在 create-react-app 创建的环境中获取本地 JSON 文件时出现 JSON 解析错误