2009-10-16 39 views
1

我有一個數據庫列包含文件的內容。我將它轉換爲服務器上的一個字節[](我不想將文件保存到磁盤),然後將其發送到客戶端進行下載。該文件可以是任何東西(pdf,pics,word,excel等)。傳輸字節數組從服務器到瀏覽器

我有文件名,所以我知道擴展名,但我不知道如何最好的方式發送到客戶端。這裏是我目前在的地方:

string fileName = ds.Tables[0].Rows[0]["form_file_name"].ToString(); 
byte[] fileContents = (byte[])ds.Tables[0].Rows[0]["form_file_contents"]; 

我該從哪裏出發?

+1

將文件的內容保存爲數據庫中的字節數組仍然將其保存到磁盤:) – D3vtr0n

+1

它將其保存到數據庫的磁盤上,而不是運行網站的磁盤 – Miles

回答

6

您應該能夠通過這樣的事情寫出來給客戶端...

Response.Clear(); 
Response.AddHeader("Content-Length", fileContents.Length.ToString()); 
Response.AddHeader("Content-Disposition", "attachment; filename=FILENAME"); 
Response.OutputStream.Write(fileContents, 0, fileContents.Length); 
Response.Flush(); 
Response.End(); 
+2

或Response.BinaryWrite(fileContents)而不是寫入OutputStream。 – Guffa

+0

BinaryWrite上的良好調用。 –

0

我這裏倒是有類似的情況;如果你正在處理文件,你應該考慮如果你有一個大的數據庫會發生什麼。

您可以使用DataReader.GetBytes(),如Memory effective way to read BLOB data in C#/SQL 2005,並以塊的形式寫入該數據。這是一個更好的方法,因爲你不需要在內存中有整個文件,但每次只需要一小段文件。

使用這個想法,你可以編寫代碼來讀取64k數據塊,並將它們寫入如Quintin Robinson said

相關問題