2009-09-04 34 views
0

我正在從數據庫服務器中檢索文件並允許用戶下載它。問題是,我沒有從服務器讀取相同的字節流。下載鏈接沒有返回正確的字節流

我已確認(通過大量的Response.Write的),我已經接收的字節數組權,他們在正確的順序,等等

下面是下載ST代碼。 FileContents是一個byte []:

 Response.Clear(); 
     Response.AddHeader("Content-Disposition", 
       "attachment; filename=" + st.FileName); 
     Response.AddHeader("Content-Length", st.FileSize.ToString()); 
     Response.ContentType = "application/octet-stream"; 
     Response.Write(new System.Text.ASCIIEncoding() 
       .GetString(st.FileContents)); // Problem line 
     Response.End(); 

我已經試過了的byte []轉換成字符串的幾種方法,並沒有給我需要的結果。

FF D8 FF E0 1E D0 4A 46 58 58 00 10 FF D8 FF DB

(是的,這是一個JPEG圖像的開始)

我風的東西,如:

C3 BF C3 98 C3 BF C3 A0 1E C3 90 4A 46 58 58 00

的,而不是字節爲預期的流前6個字節變成10個完全不同的字節。是什麼賦予了?

編輯

答案是,當然,要使用的BinaryWrite,而不是寫。

回答

2

您不應該將二進制數據視爲字符串。在此示例中,ASCII編碼僅支持範圍0-127中的字符,因此任何不屬於該範圍的字節都將被視爲無效,並替換爲問號。使用HttpResponse.BinaryWrite代替:

Response.BinaryWrite(st.FileContents); 
+0

當然,與此胡鬧半小時後......片刻後,我打了「的帖子:」我看到的BinaryWrite方法。 D'哦。 – 2009-09-04 19:00:54