asp.net - 使用 asp.net web 表单中的流返回可下载文件

标签 asp.net

在 asp.net MVC 中,我可以执行以下操作,这将打开一个流:

 Stream strm1 = GenerateReport(Id);

return File(strm1, 
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "Report_" + reportId.ToString() + ".xlsx");

注意我是如何传递 strm1 的,它是一个流。然后我可以将它命名为 Report_+ ...xlsx,如上例所示。

是否有类似的方法可以使用 c# 对 asp.net web 表单执行此操作。

最佳答案

您可以使用 TransmitFileWriteFile如果文件在您的网站文件夹中。

string fileName = string.Format("Report_{0}.xlsx", reportId);
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", 
   string.Format("attachment; filename={0}", fileName));
Response.TransmitFile(fileName);
Response.End();

溪流

如果您的数据已经在内存中,您需要这个方法以块的形式写入响应。
Stream stm1 = GenerateReport(Id);
Int16 bufferSize = 1024;
byte[] buffer = new byte[bufferSize + 1];

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", 
    string.Format("attachment; filename=\"Report_{0}.xlsx\";", reportId));
Response.BufferOutput = false;
int count = stm1.Read(buffer, 0, bufferSize);

while (count > 0)
{
    Response.OutputStream.Write(buffer, 0, count);
    count = stm1.Read(buffer, 0, bufferSize);
}

关于asp.net - 使用 asp.net web 表单中的流返回可下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27974374/

相关文章:

c# - 在已经登录的情况下处理登录期间的防伪造错误? ASP.NET MVC

html - 日期字段大小(在所有情况下)大于 ASP.Net 中列中的所有其他字段

c# - 将按钮保持在表格的右下角

asp.net - 在更新面板中调用脚本或css样式

asp.net - 值不能为空。参数名称 : items (DrodownList)

c# - IEnumerable 与列表

javascript - 将 rowindex 从 gridview 项目点击传递给 javascript 函数

c# - .NET - c# - 需要跨分区查询,但禁用了 DocumentDB 数据访问问题

c# - 有没有可能在 #windows 应用程序中嵌入 word 文档?

c# - 我应该在提供文件时设置 Cache-Control header 吗?或不?