是否需要此代码,或者因为页面的UnLoad事件处理了页面上的所有控件,所以编写此类代码没有意义:
fu.PostedFile.InputStream.Flush();
fu.PostedFile.InputStream.Close();
fu.FileContent.Dispose();
我问,因为来自docs的例子,我看到他们写的代码像
FileUpload1.SaveAs(savePath);
但事后没有事情处理流,但在手上我看到有人在保存后明确处理输入流?
答案 0 :(得分:4)
Official guidance表示不需要处理此流,因为它将在请求处理结束时处理:
请求结束时,将销毁分配用于缓冲上载文件的服务器资源。要保存文件的持久副本,请使用SaveAs方法。
为了支持这一点,我还做了一些挖掘源代码的代码。事实证明,FileUpload
和HttpPostedFile
都不负责处理此流。事实上,他们自己根本不拥有任何资源,只是提供一个访问部分请求的界面。
HttpRequest
做了一些处理。但并非所有一次性物品都被丢弃。这是Dispose
:
/*
* Cleanup code
*/
internal void Dispose() {
if (_serverVariables != null)
_serverVariables.Dispose(); // disconnect from request
if (_rawContent != null)
_rawContent.Dispose(); // remove temp file with uploaded content
}
但是没有处理的是上传控制界面的集合HttpRequest.Files
。要使用数据填充此集合,每个发布的文件都会包装到HttpPostedFile
对象中,并为每个对象创建HttpInputStream
。此流对象保存对整个数据的引用(请参阅上面的rawContent
)并了解相关文件部分的偏移量和长度。值得注意的是HttpInputStream
实现了IDisposable
,但是我无法找到处理这些流对象的代码。
总结一下:
所以看起来这里的想法是,当请求处理完成后,将丢弃对相关数据的引用并将其处理。因此,手动处理您使用过的流不会受到伤害,但也没有必要。