全部
我怎样才能下载一个文件,让用户看到它正在下载(就像流媒体一样?)
我目前使用的是 ClosedXML,但如果我使用 SaveAs 方法,我必须提供一个硬编码的 URL,如果我只提供文件名,它不会自动下载到下载文件夹。
下面的方法效果很好,但我必须创建我自己的基于 HTML 的 excel 文件,并且文件变得太大了,当我使用 ClosedXML 时,文件只有 50% 或更少以下代码的大小: 但是,下载行为是我希望的样子。
有没有一种方法可以转换下面的代码,以便我可以将我的“工作簿”作为对象提供,它只下载该工作簿?
HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=Excel.xls");
HttpContext.Current.Response.Charset ="UTF-8";
HttpContext.Current.Response.ContentEncoding=System.Text.Encoding.Default;
HttpContext.Current.Response.ContentType = "application/ms-excel";
ctl.Page.EnableViewState =false;
System.IO.StringWriter tw = new System.IO.StringWriter() ;
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
谢谢
最佳答案
SaveAs()
方法支持流,因此要将 ClosedXml 工作簿作为流获取,我使用:
public Stream GetStream(XLWorkbook excelWorkbook)
{
Stream fs = new MemoryStream();
excelWorkbook.SaveAs(fs);
fs.Position = 0;
return fs;
}
然后下载文件:
string myName = Server.UrlEncode(ReportName + "_" + DateTime.Now.ToShortDateString() + ".xlsx");
MemoryStream stream = GetStream(ExcelWorkbook);
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment; filename=" + myName);
Response.ContentType = "application/vnd.ms-excel";
Response.BinaryWrite(stream.ToArray());
Response.End();
关于c# - 使用 ClosedXML 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22296136/