2013-04-25 86 views
0

長時間潛伏者第一次海報。使用.Net/Linq幾年,所以我確信我在這裏錯過了一些東西。經過無數小時的研究,我需要幫助。 我基於從https一個建議我的代碼:其被存儲在SQL數據庫中的C http://damieng.com/blog/2010/01/11/linq-to-sql-tips-and-tricks-3保存文件提示而不是FileWriteAllBytes

下面的代碼目前保存選定的文件(PDF,DOC,PNG等):\ temp目錄。很棒。我想更進一步。而不是將其自動保存到c:\ temp,我可以使用瀏覽器提示,以便將它保存到所需的位置。

{  
    var getFile = new myDataClass(); 

    //retrieve attachment id from selected row 
    int attachmentId = Convert.ToInt32((this.gvAttachments.SelectedRow.Cells[1].Text)); 

    //retrieve attachment information from dataclass (sql attachment table) 
    var results = from file in getFile.AttachmentsContents 
         where file.Attachment_Id == attachmentId 
         select file; 

    string writePath = @"c:\temp"; 

    var myFile = results.First(); 

    File.WriteAllBytes(Path.Combine(writePath, myFile.attach_Name), myFile.attach_Data.ToArray()); 
} 

因此,而不是使用File.WriteAllBytes我可以改爲從我的LINQ查詢(MYFILE)返回的數據,並將其傳遞到的東西,會提示用戶保存文件,而不是?)。這個返回的對象可以與response.transmitfile一起使用嗎?非常感謝。

回答

0

只需使用BinaryWrite(myFile.attach_Data.ToArray())方法發送數據,因爲它已經在內存中。

但第一組頭適當,例如:

"Content-Disposition", "attachment; filename="+myFile.attach_Name 
"Content-Type", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" 

內容類型指導上應該如何處理文件的接收系統。這裏有更多MS Office content types。如果在數據存儲時已知它們,則內容類型也應該存儲。

此外,由於文件內容是您希望在響應中唯一的數據,因此請撥Clear之前和End之後BinaryWrite

+0

完美的工作!非常感謝! – DysonGuy 2013-04-25 17:08:06

+0

我跳了槍!一旦我打開下載的文件,它已經損壞。我已經嘗試過使用docx和doc。出於測試目的,我保留了File.WriteAllBytes代碼,如果我從c:\ temp打開文檔,它們就會打開。所以我仍然錯過了 Response.Write(myFile.attach_Data.ToArray()); – DysonGuy 2013-04-25 20:27:17

+0

在我尋求解決方案時,我將Response.Write改爲Response.BinaryWrite。 doc文件和pdf文件現在開放正常,但docx不太好。 – DysonGuy 2013-04-25 20:46:39

相關問題