2012-05-11 40 views
1

我們正在將文件存儲爲mysql中的文件名也是。也就是 上傳它的工作正常。現在我們想要從gridview 下載它,這也是完美的。但問題是,在我們嘗試打開它時,下載了 後顯示文件格式錯誤。我們只處理辦公文檔和pdf只有 。使用Aspx從Mysql下載BLOB文件

try 
{ 
    int did = Convert.ToInt32(e.CommandArgument); 
    DataSet path = download.GetresourcePath(did); 
    byte[] fileFromDatabase = null; 
    DataRow row = path.Tables[0].Rows[0]; 
    fileFromDatabase = (byte[])row["UPLFILE"]; 
    string filename = (string)row["FILENAME"]; 

    if (fileFromDatabase.Length > 0) 
    { 
    Response.Clear(); 
    Response.Buffer = true; 
    Response.ContentType = string.Format("application/{0}", 
     Path.GetExtension(filename).Substring(1)); 
    Response.AddHeader("content-disposition", 
     string.Format("attachment;filename={0}", filename)); 
    Response.BinaryWrite(fileFromDatabase); 
    Response.Flush(); 
    Response.End(); 
    } 
} 
catch (Exception) 
{ 
    return; 
} 
  1. 在這裏所做的是我們得到它從網格視圖文件的ID。
  2. filename是我們從數據庫中獲得的文件的名稱。
  3. fileFromDatabase是Mysql的BLOB文件,我們將它轉​​換爲Byte。

所以,任何人都可以告訴我我做錯了什麼?

回答

0

我建議您不要將文件存儲爲BLOB。如果沒有別的表現,這對性能來說是非常糟糕的。

您應該將文件存儲在服務器的文件系統中,並在數據庫中存儲該文件的路徑。

+0

文件大小最大爲4MB。你可以告訴我爲什麼它顯示文件格式錯誤。 – Aaraadhana

1

嘗試刪除標題條目並手動添加它。

Response.Clear(); 
Response.ClearHeaders(); 
Response.AddHeader("Content-Type", "application/octet-stream"); 
Response.AddHeader("Content-Length", fileFromDatabase.Length.ToString()); 
Response.AddHeader("Content-Disposition",string.Format("attachment;filename={0}", filename)); 
Response.BinaryWrite(fileFromDatabase); 
Response.Flush(); 
Response.End(); 
+0

讓我試試... – Aaraadhana

+0

對不起,它已經下載後打開文件同樣的錯誤。 – Aaraadhana

+0

@Aaraadhana - 可能是文件內容保存不正確。嘗試將BLOB字段的內容保存到磁盤文件中並將其打開。 – adatapost