是否可以使用Response.Write()保存导出的Word文档文件。一旦转换成功,它现在显示“保存/打开”对话框。但我需要将此文件保存到文件夹中。请帮我解决这个问题。
我转换为Doc代码的内容如下所示。
private void ExportDataSetToWordDoc()
{
try
{
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", DateTime.Today.ToShortDateString().Replace("/", "").Replace("-", "") + "_" + DateTime.Now.ToShortDateString() + ".doc"));
Response.ContentType = "application/ms-word";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
tblMain.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}
catch (ThreadAbortException ex)
{
Common.LogError(ex);
}
}
答案 0 :(得分:1)
浏览器可以为用户提供“打开或保存”选项。这就是你的内容 - 性格“附加”鼓励浏览器做的事情。你的另一个选择是内容处理“内联”,浏览器通常只需调用应用程序(本例中是Word)来打开文件。 See MSDN
可悲的是,浏览器并不总是在“另存为”对话框中提供您指定为默认文件名的文件名。通常它会将您的网页名称作为默认名称。 Firefox至少将此作为一个bug记录,IE似乎认为它是一个“功能”。
答案 1 :(得分:1)
我修改了我的代码,如下所示。现在它保存了指定的文件夹
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", DateTime.Today.ToShortDateString().Replace("/", "").Replace("-", "") + "_" + DateTime.Now.ToShortDateString() + ".doc"));
Response.ContentType = "application/ms-word";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
tblMain.RenderControl(htw);
string strPath = Request.PhysicalApplicationPath + "Test.doc";
StreamWriter sWriter = new StreamWriter(strPath);
sWriter.Write(sw.ToString());
sWriter.Close();
感谢。
答案 2 :(得分:0)
您可以使用路径使用流编写器(System.IO.StreamWriter)。 当流编写器关闭时,文件将保存在指定的路径上。
但是,它会保存在服务器磁盘上。如果要在客户端保存,除了询问用户放置文件的位置之外别无选择。未经其批准,您无法在客户端上保存文件。
var x = new System.IO.StreamWriter(path);
x.Close();