2013-03-27 79 views
0

是否可以使用Response.Write()保存導出的Word文檔文件。現在它顯示保存/打開對話框,一旦成功轉換。但我需要將此文件保存到一個文件夾。請幫我解決這個問題。將導出的doc文件保存到磁盤

我的轉換爲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

您無法控制瀏覽器保存文件的位置。如果可以的話,想象一下惡意軟件可能有多好玩...... – 2013-03-27 12:36:35

回答

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

謝謝。

0

您可以使用路徑來使用流寫入器(System.IO.StreamWriter)。 當流寫入器將被關閉時,文件將被保存在指定的路徑上。

但是,它會保存在服務器磁盤上。如果你想保存在客戶端,你沒有別的選擇,而只是詢問用戶把文件放在哪裏。未經批准,您無法將文件保存到客戶端。

var x = new System.IO.StreamWriter(path); 
x.Close(); 
1

由瀏覽器爲用戶提供「打開或保存」選項。這就是你的內容處置「附加」是鼓勵瀏覽器去做的。您的其他選項是「內聯」內容處置,瀏覽器通常會調用應用程序(在這種情況下爲Word)來打開文件。 See MSDN

不幸的是,瀏覽器不會總是提供您在「另存爲」對話框中指定爲默認文件名的文件名。相反,它通常會提供網頁的名稱作爲默認網頁。 Firefox至少把這個文件當成一個bug,IE似乎認爲它是一個「功能」。