将PDF流写入响应流

ryu*_*ice 17 c# asp.net asp.net-mvc

如果我有一个pdf文件作为流,我怎么能把它写入响应输出流?

Tal*_*joe 21

由于您使用的是MVC,最好的方法是使用FileStreamResult:

return new FileStreamResult(stream, "application/pdf")
{
    FileDownloadName = "file.pdf"
};
Run Code Online (Sandbox Code Playgroud)

与您的控制器一起玩Response.WriteResponse.OutputStream从您的控制器进行游戏是非惯用的,并且没有理由在已经存在时编写您自己的ActionResult.


小智 12

一种方法如下:

//assuming you have your FileStream handle already - named fs
byte[] buffer = new byte[4096];
long count = 0;

while ((count = fs.Read(buffer, 0, buffer.Length)) > 0)
{
    response.OutputStream.Write(buffer, 0, count);
    response.Flush();
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用GZIP压缩来加速文件到客户端的传输(流式传输的字节数更少).

  • 最好只在IIS7配置中设置动态内容的压缩,以便全面实现. (2认同)

Abd*_*oor 6

在asp.net中,这是下载pdf文件的方法

    Dim MyFileStream As FileStream
    Dim FileSize As Long

    MyFileStream = New FileStream(filePath, FileMode.Open)
    FileSize = MyFileStream.Length

    Dim Buffer(CInt(FileSize)) As Byte
    MyFileStream.Read(Buffer, 0, CInt(FileSize))
    MyFileStream.Close()

    Response.ContentType = "application/pdf"
    Response.OutputStream.Write(Buffer, 0, FileSize)
    Response.Flush()
    Response.Close()
Run Code Online (Sandbox Code Playgroud)

  • 如果它是用 c# 编写的,我会更喜欢这个答案 (3认同)