2011-04-29 61 views

回答

17

由於您使用MVC,最好的辦法是使用FileStreamResult

return new FileStreamResult(stream, "application/pdf") 
{ 
    FileDownloadName = "file.pdf" 
}; 

與控制器Response.WriteResponse.OutputStream打非慣用的和沒有理由的時候已經存在一個寫自己的ActionResult 。

-2

請試試這個:

protected void Page_Load(object sender, EventArgs e) { 
     Context.Response.Buffer = false; 
     FileStream inStr = null; 
     byte[] buffer = new byte[1024]; 
     long byteCount; inStr = File.OpenRead(@"C:\Users\Downloads\sample.pdf"); 
     while ((byteCount = inStr.Read(buffer, 0, buffer.Length)) > 0) { 
      if (Context.Response.IsClientConnected) { 
       Context.Response.ContentType = "application/pdf"; 
       Context.Response.OutputStream.Write(buffer, 0, buffer.Length); 
       Context.Response.Flush(); 
      } 
     } 
    } 
+0

確定爲Web表單的方式s但不適用於mvc – lnu 2011-04-29 09:57:29

+0

爲什麼字節數組的長度是1024?如果它的大小超過了你的定義呢? – 2014-08-26 08:12:30

+0

因爲文件未關閉而Downvote。 – arni 2017-12-01 17:14:37

11

一種方式做到這一點如下:

//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(); 
} 

您還可以使用GZIP壓縮,以加快文件傳輸到客戶端(少流式傳輸)。

+1

最好在IIS7配置中設置動態內容的壓縮,以便在整個板上進行。 – Talljoe 2011-04-29 05:54:21

+0

@Talljoe - 同意我也這樣設置它,我應該更清楚 – ljkyser 2011-04-29 05:56:24

3

HTTP響應是通過HttpContext.Response.OutputStream屬性暴露給你一個流,所以如果你有PDF文件流,你可以簡單地將數據從一個流複製到其他:

CopyStream(pdfStream, response.OutputStream); 

對於實施CopyStream看到Best way to copy between two Stream instances - C#

5

在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() 
+1

我想這個答案更多,如果它是用c#編寫的,就像問題 – JSON 2016-08-10 20:26:17

+0

Downvote,因爲FileStream不會自動處理(嘗試/最後或使用)。 – arni 2017-12-01 17:16:40