【轉】c#實現檔案下載

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   os   使用   sp   

需求:點擊SAVE,去ajax去後台下載檔案,完成後出現儲存對話方塊,然後直接下載.

解決方案:下載完成後用JS轉到向到另一個頁面,在這頁面Page_Load裡用C#Response對象直接下載.

 

 

下載實現代碼

 private void DownFile()   {      try      {         long lngFileSize;         byte[] bytBuffer;         int iReading;         string sFileName = Server.MapPath("TextFile.txt");         Stream outStream = Response.OutputStream;//get output stream         //set htttp header         Response.ContentType = "application/Zip";         Response.AppendHeader("Connection", "close");         Response.AppendHeader("Content-Disposition", "  attachment;  filename  =  ItemMarc.txt");//default file name when download         FileStream fStream = new FileStream(sFileName, FileMode.OpenOrCreate, FileAccess.Read);         lngFileSize = fStream.Length;         bytBuffer = new byte[(int)lngFileSize];         while ((iReading = fStream.Read(bytBuffer, 0, (int)lngFileSize)) > 0)         {            outStream.Write(bytBuffer, 0, iReading);         }         fStream.Close();         outStream.Close();         Response.End();      }      catch (Exception ex)      {         throw ex;      }         }

 

 

解釋:1.Response.ContentType = "application/Zip";

Content-Type是返回訊息中非常重要的內容,它標識出這個返回內容的類型,其值為“主類型/子類型”的格式,例如最常見的就是text /html,它的意思是說返回的內容是文本類型,這個文本又是HTML格式的。原則上瀏覽器會根據Content-Type來決定如何顯示返回的訊息體內 容。常見的內容類型有:
text/html HTML文本
image/jpeg JPG圖片
image/gif GIF圖片
application/xml XML文檔
audio/x-mpegurl MP3檔案清單,如果安裝了Winamp,則可以直接把它當面M3U檔案來開啟

 

2.Response.AppendHeader("Connection", "close");

在http1.1中request和reponse header中都有可能出現一個connection的頭,此header的含義是當client和server通訊時對於長連結如何進行處理。
   在http1.1中,client和server都是預設對方支援長連結的, 如果client使用http1.1協議,但又不希望使用長連結,則需要在header中指明connection的值為close;如果server方 也不想支援長連結,則在response中也需要明確說明connection的值為close.
    不論request還是response的header中包含了值為close的connection,都表明當前正在使用的tcp連結在當天請求處理完畢後會被斷掉。以後client再進行新的請求時就必須建立新的tcp連結了。

 

3. Response.AppendHeader("Content-Disposition", "  attachment;  filename  =  ItemMarc.txt");

Content-Disposition:如果用AddHeader的方法在HTTP訊息頭中加入Content-Disposition段,並指定其值為“attachment”,那麼無論這個檔案是何類型,瀏覽器都會提示我們下載此檔案,因為此時它認為後面的訊息體是一個“附件”,不需要由瀏覽器來處理了。通過AddHeader函數可以為HTTP訊息頭加入我們自訂的內容。使用這種方法可以強制讓瀏覽器提示下載檔案,即使這個檔案是我們已知的類型,基於 是HTML網頁。如果想要讓使用者下載時提示一個預設的檔案名稱,只需要在前面一句話後加上“filename=檔案名稱”即可。

如果把Content-Type和Content-Disposition結合在一起使用會怎麼樣呢?
開啟一個網頁時,瀏覽器會首先看是否有Content-Disposition: attachment這一項,如果有,無論Content-Type的值是什麼,都會提示檔案下載。
如果指定了filename,就會提示預設的檔案名稱為此檔案名稱。

 

4.Response.End();將緩衝輸出到用戶端,實際現象,如果沒有這一句,那麼會將預設的所有HTML內容也一起返回到伺服器.

【轉】c#實現檔案下載

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.