2012-08-06 214 views
1

我正在更新一個asp.net應用程序並從mssql數據庫中保存和檢索文檔。保存非常簡單,但有沒有辦法從直接從數據庫下載的錨點下載文件?讓我們只是說,blob綁定在一個gridview或其他一些數據控件,我想這樣做,例如:<a href="<%#Eval("blobcolumn")%">Download Doc</a>。我也保存文件名稱。從SQL Server讀取blob並下載它

回答

2

您可以創建一個處理程序來下載數據。

sample.ashx


public void ProcessRequest (HttpContext context) 
{ 
    string id = context.Request["id"]; 
    if (!string.IsNullOrEmpty(id)) 
    { 
     //read byte[] and other data from database based upon given ID 
     byte []ar=//result from database 
     string fileName=//filename 
     context.Response.ContentType = "Application/octet-stream"; 
     context.Response.AddHeader("Content-Length", ar.Length.ToString()); 
     context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName); 
     context.Response.BinaryWrite(ar); 
     context.Response.Flush(); 
     context.Response.End(); 
     } 
} 

,並通過超鏈接請求

<a href="sample.ashx?id=101">Download .zip</a> 
<a href='sample.ashx?id=<%#Eval("ID")%>'><%#Eval("Desc")%></a> 
+0

謝謝,正是我需要的。 – user516883 2012-08-07 20:14:33

3

首先,你不會分配圖像HREF元素,你將創建一個img標籤來顯示圖像,則href標籤即可下載或直接在href嵌入圖像標籤:

<a href="http://somelink.com"><img src="<%#Eval("blobcolumn")%></img></a> 

其次,顯示無地址的圖像內聯到一個文件需要Data URI,這意味着圖像的基礎-64版本的被嵌入在網頁中:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA 
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO 
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot"> 

這種方法意味着顯着量的您的Web服務器上的額外流量以及您的結局因爲圖像不會被緩存,因爲如果您爲網絡服務器中的圖像提供了實際的URL(即, /images/reddot.png)。

我認爲將圖像的副本保存到網絡服務器併爲網頁中的圖像提供網址會更好。

如果擔心文件的大小或數量,可以創建批處理作業以從臨時圖像緩存清除超過特定天數或小時數的文件。