2010-05-04 68 views
1

我在數據庫中有一個二進制文件。 當按鈕被點擊時,如何在頁面的頁眉中下載此文件從數據庫中下載二進制文件

任何想法?

+0

你是什麼意思?頁面標題中的進度條? – codymanix 2010-05-04 15:24:18

+0

是的,我已經從數據庫中讀取文件,我不會只是現在下載文件。 – 2010-05-04 15:33:06

回答

1

好吧,有幾件事你可能會嘗試做,它不完全清楚,但我會採取刺。比方說,你已經有了由文件標識符和二進制文件信息的以下基本數據庫:

CREATE TABLE Test 
(
FileId int identity(1,1) PRIMARY KEY, 
FileData varBinary(max) 
) 

你需要的是一個頁面(在這種情況下,所謂的「GetFile.aspx」)與在以下後臺代碼的Page_Load事件:

'Make sure we've got a querystring 
    If String.IsNullOrEmpty(Request.QueryString("fileid")) Then 
     Throw New ApplicationException("Missing querystring parameter FileId") 
    End If 
    Dim FileId As Integer 
    'Make sure the querystring is an Int 
    If Not Integer.TryParse(Request.QueryString("fileid"), FileId) Then 
     Throw New ApplicationException("Malformed querystring parameter FileId") 
    End If 
    'Change YourDsnHere to point to your database 
    Using Con As New SqlConnection("YourDsnHere") 
     Con.Open() 
     'Select the file 
     Using Com As New SqlCommand("SELECT * FROM Test WHERE [email protected]", Con) 
      Com.CommandType = Data.CommandType.Text 
      Com.Parameters.AddWithValue("@FileId", FileId) 
      Using RDR = Com.ExecuteReader() 
       If RDR.Read Then 
        'Get the data out as a byte array 
        Dim Bytes() = DirectCast(RDR.Item("FileData"), Byte()) 
        'Clear all response headers 
        Response.Clear() 
        'Set the type, my sample is a RAR file, you'll need to look up MIME types for yours 
        Response.AddHeader("Content-Type", "application/x-rar-compressed") 
        'Set the name of the file, if you don't set it browsers will use the name of this page which you don't want 
        Response.AddHeader("Content-Disposition", "inline; filename=YourFilenameHere.rar") 
        'Optional but nice, set the length so users get a progress bar 
        Response.AddHeader("Content-Length", Bytes.Count.ToString()) 
        'Push the bytes out raw 
        Response.BinaryWrite(Bytes) 
        'Close the response stream so no more HTML gets accidentally pushed out 
        Response.End() 
       Else 
        'Error, no file was found 
       End If 
      End Using 
     End Using 
     Con.Close() 
    End Using 

然後在你的頁面只是當人點擊該按鈕引導他們到這個頁面,確保在查詢字符串傳遞一個有效fileid

就像我說的,我覺得這是,你在找什麼,如果不是,說明你的描述上面

2

好吧,如果你有一個腳本生成的文件,一個腳本表示,它輸出的最常用的方法是發送一個HTTP標頭看起來是這樣的:

Content-Type: text/html; charset=utf-8 

這將使得瀏覽器顯示爲文本。爲了迫使[大多數瀏覽器]下載文件,你需要發送以下附加標題:

Content-Type: application/zip 
Content-Disposition: inline; filename=test.zip 
Content-Length: 8192 

[FILE CONTENTS] 

爲名爲「test.zip」一個8KB的ZIP文件的例子。如果您可以找到一些方法來更改使用生成該文件的腳本發送的標頭(即將其從數據庫中拉出),那麼它很可能會強制瀏覽器將其解釋爲要下載的文件。

然後,只需鏈接到您的標題中的腳本。

+0

好的,但文件是在一個對象中,這是問題 – 2010-05-04 15:34:24

+0

如果它是在爲生成鏈接的頁面定義的對象中,這將是一個問題。基本上,瀏覽器做事的方式必須將其重定向到單獨的頁面以啓動文件傳輸。 – amphetamachine 2010-05-08 21:16:58