无法使用 Session 从 UploadFile 控件保存文件
我尝试使用 UploadFile 控件上传文件,但无法执行此操作。当我尝试保存会话中保留的文件时,我意识到问题。首先,我将 UploadControl 分配给会话变量:
Page.Session["postedFile"] = fuUploadGeometry;
之后,当我单击“上传”按钮并想要保存此文件时:
((FileUpload)Session["postedFile"]).SaveAs(filePath);
我收到错误
cannot access a closed file
但是当我直接使用 FileUpload 名称调用时,
fuUploadGeometry.SaveAs(filePaht)
问题不存在。
为什么??如果有人知道如何解决这个问题,我将不胜感激。
!!!!!!!!!!!!!!! 问题解决了:)
我在 web.config
中设置,到目前为止一切正常:)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不要为此使用会话。它没有任何作用。而且,正如您所发现的,无论如何,您都不能在提交请求之外使用它。
只需使用有效的代码即可。这就是你应该这样做的方式。
Do not use Session for this. It serves no purpose. And, as you have discovered, you can't use it beyond the request where it is submitted, anyway.
Just use the code that's working. That's how you are supposed to do it.
安德鲁说的话。通过设置 requestLengthDiskThreshold,您所做的就是禁用缓冲,这将导致服务器消耗更多内存,并且所有内容都运行得更慢。
我认为正确的解决方案是使用 SaveAs 方法将发布的文件保存到第一次回发时的临时文件夹中,并将文件路径存储到视图状态或会话中的临时文件。
在任何额外的回发或重定向之后,特别是在涉及异步线程的情况下,如果需要缓冲,SaveAs 函数将无法工作;您将收到错误“无法访问已关闭的文件”。
What Andrew said. And by setting requestLengthDiskThreshold all you are doing is disabling buffering which will cause the server to consume more memory and everything to run slower.
I think the correct resolution is to use the SaveAs method to save the posted file to a temporary folder on the FIRST postback, and store the file path to the temp file in viewstate or session.
After any additional post back or redirect, especially if asynchronous threads are involved, the SaveAs function is not going to work if buffering is required; you will get the error "Cannot access a closed file".