30

我希望这是一个快速的问题。我需要编写一些报告,然后提示用户将其保存到他/她的本地计算机。上次我这样做时,我将文件写入网络服务器,然后通过Response对象将其发送到客户端。

在网络服务器上创建

            TextWriter tw = new StreamWriter(filePath);

发送给客户

           page.Response.WriteFile(path);

问题是,有没有办法跳过将物理文件写入网络服务器并直接从代表文档的对象到响应?

4

4 回答 4

28

您可以像这样使用 Response.ContentType

Response.ContentType = "text/plain";
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.AddHeader("Content-Disposition", "attachment;filename=yourfile.txt");

如果您想编写文本文件,这当然有效。如果您想编写一个 .doc,例如您将 ContentType 更改为“application/msword”等...

于 2009-07-02T06:49:49.870 回答
17

你可以。

试试这个:

Table oTable = new Table();
//Add data to table.

Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename="test.xls"");
Response.Charset = "";
this.EnableViewState = false;
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.Html32TextWriter oHtmlTextWriter = new System.Web.UI.Html32TextWriter(oStringWriter);
0Table.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();

这将提示用户打开或保存 test.xls 文件。同样,您可以提供其他 ASP.NET 对象来代替 Table。

于 2009-07-02T06:46:22.280 回答
5

是的。

page.Response.WriteFile(yourData, 0, yourData.Length);
于 2009-07-02T06:46:48.050 回答
5

该问题的确切答案取决于您如何组织您的报告(即您所指的“对象”是什么)。如果您只有一个字符串,则可以使用 Response.Write 来编写它。如果您需要 TextWriter,Response.Output 就是您想要的 - 这样您就可以跳过写入磁盘然后使用 WriteFile。此外,如果您的内容碰巧是二进制的,您可以使用 Response.OutputStream 。

如果您希望用户看到保存文件对话框,您可能还需要设置 Response.AddHeader("Content-Disposition", "attachment")。但是,Content-Disposition 不一定会得到尊重,因此用户仍然可以直接在浏览器中打开报表。请记住在输出实际内容之前设置标题!

此外,根据报告的格式,您可能希望将 Response.ContentType 设置为适当的内容,例如 text/plain、text/csv 或您拥有的任何内容。IANA 站点上列出了正确的 mime 类型。

于 2009-07-02T06:49:09.840 回答