C#Asp.net将文件写入客户端

jim*_*jim 27 c# response

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

在Web服务器上创建

            TextWriter tw = new StreamWriter(filePath);
Run Code Online (Sandbox Code Playgroud)

发送给客户

           page.Response.WriteFile(path);
Run Code Online (Sandbox Code Playgroud)

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

Nik*_*kis 28

您可以像这样使用Response.ContentType

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

当然,如果您要编写文本文件,这当然有效.如果您想编写.doc,例如将ContentType更改为"application/msword"等...

  • ***缓冲区***是什么? (2认同)

Gan*_* R. 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();
Run Code Online (Sandbox Code Playgroud)

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

  • @ShashwatTripathi我不确定.这是我早就用过的一段代码.恕我直言,它不支持简历或多个下载连接. (2认同)

San*_*nen 5

是.

page.Response.WriteFile(yourData, 0, yourData.Length);
Run Code Online (Sandbox Code Playgroud)


Jou*_*emi 5

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

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

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