c# - 在 Controller (ASP.NET MVC 3)中作为流下载的文件会自动处理吗?

标签 c# asp.net-mvc-3 stream

让我们假设下载所选文件的 Controller :

 public FileResult Download( string f ) {

         Stream file = MyModel.DownloadFiles( f );

         return File( file, "application/octet-stream", (file as FileStream).Name );
 }

MyModel包含

public static Stream DownloadFiles(string file){

   return new FileStream(file, FileMode.Open, FileAccess.Read);
}

如果我在 Controller 中使用 using 关键字,则会抛出异常:无法访问已关闭的文件

好吧,我想确定下载的文件是否会被处理(我不知道是否可能,如何处理)?

谢谢

最佳答案

Controller.File 方法在内部使用FileStreamResult 类,该类已经包含using 关键字

protected override void WriteFile(HttpResponseBase response) {
    // grab chunks of data and write to the output stream
    Stream outputStream = response.OutputStream;
    using (FileStream) {
        byte[] buffer = new byte[_bufferSize];
        while (true) {
            int bytesRead = FileStream.Read(buffer, 0, _bufferSize);
            if (bytesRead == 0) {
                // no more data
                break;
            }
            outputStream.Write(buffer, 0, bytesRead);
        }
    }
}

https://github.com/ASP-NET-MVC/ASP.NET-Mvc-3/blob/master/mvc3/src/SystemWebMvc/Mvc/FileStreamResult.cs

关于c# - 在 Controller (ASP.NET MVC 3)中作为流下载的文件会自动处理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13265392/

相关文章:

iPhone 套接字流行为 - 将字节发送到服务器.. NSStream/CFStream

Java StringBuffer 工作正常,reverse() 添加换行符

c# - 从 xml 文件加载 System.Diagnostics.TraceSource 的配置

database - 默认 ASP.NET MVC 3 项目帐户 Controller 如何工作

asp.net - asp.net MVC3 中自动生成的表单

asp.net-mvc - 是否可以将封装 Person 的 ViewModel 对象传递给 Create View ,但仅从 POST Create 操作方法接收 Person 对象?

c# - 检查流是否为空

c# - C# 中字符的按位补码 vs C overflowexception

c# - 我怎样才能不出错地使用oledb?

c# - Azure DocumentDb - 查询空间数据