我希望这是一个简单的问题,我希望。 我需要写一些报告,然后让用户提示将其保存到他/她的本地机器。 我最后一次这样做,我写一个文件到网络服务器,然后通过它发送到客户端Response
对象。
建立在网络服务器
TextWriter tw = new StreamWriter(filePath);
发送到客户端
page.Response.WriteFile(path);
现在的问题是,有没有办法到物理文件写入跳到到Web服务器,并从代表文件的响应对象右走?
你可以这样使用Response.ContentType
Response.ContentType = "text/plain";
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.AddHeader("Content-Disposition", "attachment;filename=yourfile.txt");
如果你想要写一个文本文件,这门课程的工作。 如果你想写例如一个.doc更改的ContentType为“应用程序/ msword”等...
您可以。
试试这个:
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对象。
是。
page.Response.WriteFile(yourData, 0, yourData.Length);
确切回答这个问题要看你有你的报告做组织(即什么是“对象”你指的是)。 如果你有一个字符串,您可以使用Response.Write只写它。 如果你需要一个TextWriter,Response.Output是你想要的 - 这样你可以跳过写入磁盘,然后使用WriteFile的。 另外,如果你的内容正好是二进制的,你可以使用Response.OutputStream了点。
您可能还需要设置Response.AddHeader(“内容处置”,“附件”),如果你希望用户看到一个保存文件对话框。 然而,内容处置不一定兑现,因此用户仍可能会收到报告直接在浏览器中打开。 记住,你输出的实际内容之前设置头!
另外,根据该报告的格式,你可能要Response.ContentType设置为适合诸如文本/平原,文本/ CSV或任何有你的东西。 正确的MIME类型,在列出的IANA网站 。