2012-05-30 23 views
12

不應該很難找到如何做到這一點。基本上,我試圖採取一個字符串,並讓客戶端保存它,當他們點擊一個按鈕。它應該彈出一個保存/打開對話框。沒有額外的花裏胡哨或任何東西。這不是火箭科學,(或者我會想到的)。提示用戶在ASP.NET C中保存/打開文件#

似乎有很多不同的方式,(StreamWriter,HttpResponse等),但沒有一個例子能找到正確的工作或解釋發生了什麼。提前致謝。

一個例子的代碼的很多塊,我發現的一個......

(這只是一個例子,隨意不根據解決這個答案。)

String FileName = "FileName.txt"; 
String FilePath = "C:/...."; //Replace this 
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
response.ClearContent(); 
response.Clear(); 
response.ContentType = "text/plain"; 
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";"); 
response.TransmitFile(FilePath); 
response.Flush(); 
response.End(); 

線2說替換那個字符串。怎麼樣?這段代碼被宣傳爲啓動對話框。我不應該在代碼中設置路徑,對吧?

編輯:最後的結果(再次編輯,刪除有來結束()之前;)

 string FilePath = Server.MapPath("~/Temp/"); 
     string FileName = "test.txt"; 

     // Creates the file on server 
     File.WriteAllText(FilePath + FileName, "hello"); 

     // Prompts user to save file 
     System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
     response.ClearContent(); 
     response.Clear(); 
     response.ContentType = "text/plain"; 
     response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";"); 
     response.TransmitFile(FilePath + FileName); 
     response.Flush(); 

     // Deletes the file on server 
     File.Delete(FilePath + FileName); 

     response.End(); 
+0

此示例演示如何流的文件回給客戶。您是否正在尋找一種方法來在客戶端上調用保存/打開對話框,以便您可以將文件上傳到服務器? –

+0

「基本上我試圖帶一個字符串,並讓客戶端在點擊一個按鈕時保存它。」一些簡單的像... File.WriteAllText(「C:\\ text.txt」,「hello」);除了一個對話框。我希望用戶將其下載到他們指定的任何位置。 – Ber53rker

回答

5

2號線(文件路徑)表示服務器

8號線的路徑文件

response.TransmitFile(FilePath); 

傳送特定文件給客戶端,這就是彈出保存對話框。

如果不傳送文件,我不知道如果對話框將在所有(即使你設置一個頭)

不管怎麼說彈出,我覺得8號線應爲:

response.TransmitFile(FilePath + FileName); 
1

FilePath應該指向要發送給客戶端的文件。這是服務器上的路徑

3

會有通過瀏覽器默認的對話框,如果它會找到應對的一些文件。如果您希望瀏覽器顯示的是默認的對話框中,你需要做的就是發送響應到瀏覽器的文件,您可以在許多方式做:

  1. 如果它是一個靜態文件,

    • 最好的方法是隻提到錨標記的href中的文件路徑(顯然,如果你沒有安全問題)
    • 只是你的迴應,它在你的例子中完成的方式。
    • 其他的方法可以參考這裏4 ways to send pdf from asp.net
  2. 如果它是你需要在運行時生成一個動態的文件,你可以做一個把戲,生成文件流的文件,把它放在一些臨時文件夾在服務器上,如上所述,將其作爲靜態文件進行讀取。

1

只需使用此代碼,它應該工作,以提示用戶打開打開或保存在系統上的文件的對話框....

byte[] bytesPDF = System.IO.File.ReadAllBytes(@"C:\sample.pdf"); 

     if (bytesPDF != null) 
     { 

      Response.AddHeader("content-disposition", "attachment;filename= DownloadSample.pdf"); 
      Response.ContentType = "application/octectstream"; 
      Response.BinaryWrite(bytesPDF); 
      Response.End(); 
     } 
+0

BinaryWrite我對excel和數據進行同樣的事情直到客戶端(在開發工具中檢查),但它不提示文件保存。 –