我正在寻找将文件下载到客户端PC的代码,我不想存储物理文件,并担心在以后删除它。 目前我创建了一个物理文件,然后下载它,文件名保持不变,因此它取代了前一个文件。我担心的是,当两个用户同时尝试下载时,最终可能会覆盖该文件。
以下是我的一些代码:
using (var package = new ExcelPackage(existingFile))
{
// edit cells and add details into the excel file
//Here u save the file, i would like this to be a stream
using (FileStream aFile = new FileStream(MapPath("../../template/LeadsExport.xlsx"), FileMode.Create))
{
try
{
package.SaveAs(aFile);
aFile.Close();
}
catch (Exception ex)
{
}
}
// Here i download the file, i would like this to use a stream and not a physical file
FileInfo file = new FileInfo(MapPath("../../template/LeadsExport.xlsx"));
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "text/plain";
Response.Flush();
Response.TransmitFile(file.FullName);
Response.End();
}
我希望将软件包保存到文件流中,而不是物理文件,然后以某种方式下载它。
答案 0 :(得分:3)
在代码和问题文本中,你已经有了一半的答案。而不是将Excel包写入磁盘,而是将其写入响应流。
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=LeadsExport.xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.BinaryWrite(package.GetAsByteArray());
Response.End();