2012-12-24 60 views
0

我正在開發一個只能在我們的組織內訪問的網站。使用VB.NET將文件下載到ASP.NET客戶端PC

我想實現一個功能,客戶端將從服務器下載文件(Visio File *.vsd)並將其保存到任何位置。

我遇到了一個解決方案:

dim wc as new WebClient() 

wc.downloadFile(src,dest) 

但是,這個方案不會提示另存爲對話框(,我想在我的應用)。另外,我應該知道客戶PC上保存文件的路徑,以便路徑可以保存在數據庫中。

(參考:我想要實現類似VSS功能。)

回答

4

在ASP.NET,如果你想流的文件給客戶端,並有保存對話框提示用戶選擇一個位置,你將不得不直接設置正確的內容類型和內容處置響應頭,然後將文件寫入響應流:

例如:

protected void SomeButton_Click(object sender, EventArgs e) 
{ 
    // TODO: adjust the path to the file on the server that you want to download 
    var fileToDownload = Server.MapPath("~/App_Data/someFile.pdf"); 

    Response.ContentType = "application/octet-stream"; 
    var cd = new ContentDisposition(); 
    cd.Inline = false; 
    cd.FileName = Path.GetFileName(fileToDownload); 
    Response.AppendHeader("Content-Disposition", cd.ToString()); 

    byte[] fileData = System.IO.File.ReadAllBytes(fileToDownload); 
    Response.OutputStream.Write(fileData, 0, fileData.Length); 
} 

現在,當這個代碼前該文件將被髮送到客戶端瀏覽器,該瀏覽器將提示將其保存在他的計算機上的特定位置。

不幸的是,出於安全原因,您無法捕獲客戶端選擇將文件存儲在他的計算機上的目錄。這些信息絕不會通過網絡傳輸,而且您無法在ASP.NET應用程序中知道它。因此,您必須找到其他方式來獲取此信息,例如要求客戶在某個文本框或其他字段中輸入該信息。

+0

謝謝..將嘗試它 –

+1

@ NK-在你嘗試它後,什麼?沒有投票,不接受?如果工作沒有意見,或者你面臨什麼其他問題? – Aristos

+0

我試過....我在線上遇到問題,我設置了內容類型。將更新您的位置我錯了。謝謝 –