将导出的doc文件保存到磁盘

时间:2013-03-27 12:24:42

标签: c# asp.net export

是否可以使用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);
        }

    }

3 个答案:

答案 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();