C# 是否将Excel软件包作为文件下载而不创建物理文件?

C# 是否将Excel软件包作为文件下载而不创建物理文件?,c#,excel,file,filestream,epplus,C#,Excel,File,Filestream,Epplus,我正在寻找代码下载一个文件到客户端的pc,我想不存储物理文件,并担心在以后删除它。 在我创建一个物理文件并下载它的那一刻,文件名保持不变,因此它将替换上一个文件。我担心的是,当两个用户同时尝试下载时,可能会导致多个用户覆盖文件 以下是我的一些代码: using (var package = new ExcelPackage(existingFile)) { // edit cells and add details into the excel file //Here u save

我正在寻找代码下载一个文件到客户端的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();

}

我想有一个文件流,而不是一个物理文件保存包,然后以某种方式下载它

在代码和问题文本中,您已经得到了一半的答案。将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();

不要使用
FileStream
,而是使用
MemoryStream
。不清楚这两个代码块之间有什么关系。下载该文件,但其内容为空。只是我编辑之前开始使用的模板你可能想提出一个新的问题,因为这似乎是一个完全不同的问题。我认为这是正确的,认为其他地方有问题,让我修复它,我完成后会将其标记为正确。非常感谢你的帮助。谢谢,问题出在别的地方。这很好用,非常感谢你的帮助。