保存文件提示而不是FileWriteAllBytes

时间:2013-04-25 16:27:32

标签: asp.net sql linq iqueryable savefiledialog

长时间潜伏着第一次海报。和.Net / Linq一起工作了几年,所以我确定我在这里遗漏了一些东西。经过无数个小时的研究,我需要帮助。 我的代码基于https:http://damieng.com/blog/2010/01/11/linq-to-sql-tips-and-tricks-3

的建议

以下代码目前将存储在sql数据库中的所选文件(pdf,doc,png等)保存到C:\ 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一起使用吗?非常感谢。

1 个答案:

答案 0 :(得分: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