2014-09-30 219 views
0

在我的應用程序中,我想給用戶下載PDF文件的選項。在我的代碼中,文件被瀏覽器打開;不過,我想要下載文件。這裏是我的代碼:用C#下載PDF文件

控制器

 string name = id; //id is the name of the file 
     string contentType = "application/pdf"; 

     var files = objData.GetFiles(); //list of files 


     string filename = (from f in files 
          orderby f.DateEncrypted descending 
          where f.FileName == name 
          select f.FilePath).First(); //gets the location of the file 

     string FullName = (from f in files 
          where f.FileName == name 
          select f.FileName).First(); //gets the new id in new location to save the file with that name 



     //Parameters to File are 
     //1. The File Path on the File Server 
     //2. The content type MIME type 
     //3. The parameter for the file save by the browser 
     return File(filename, contentType, FullName); 

這裏是我如何下拉菜單中使用它。

查看

<li><a id="copyURL" href="@Url.Action("Download", "Home", new { id = item.FileName})">Download</a></li> 

通過點擊 「下載」,該文件被打開的瀏覽器。

回答

0

將您的內容類型設置爲「application/octet-stream」,以便PDF插件不會嘗試將其拾取並顯示出來。然後瀏覽器會將其作爲文件下載進行處理。

+0

瀏覽器仍然嘗試打開它。我用Chrome和IE試了一下。 – user3853986 2014-09-30 22:24:27

+0

你可以嘗試在你的return語句之前添加這行嗎? 'Response.AddHeader(「content-disposition」,「attachment; filename =」+ filename);' – 2014-09-30 22:45:51

+0

仍然一樣。我試過 Response.AddHeader(「content-disposition」,「attachment; filename =」+ filename); 和 Response.AddHeader(「content-disposition」,「attachment; filename =」+ FullName); – user3853986 2014-09-30 23:01:43

0

從網上下載文件:

這個例子說明了如何從網站到本地硬盤下載文件。如何下載文件的簡單方法是使用WebClient類及其方法DownloadFile。此方法有兩個參數,第一個是要下載的文件的URL,第二個參數是要保存文件的本地磁盤的路徑。 同步下載文件

以下代碼顯示如何同步下載文件。此方法阻止主線程直到文件被下載或發生錯誤(在這種情況下拋出WebException)。 [C#]:

using System.Net; 

WebClient webClient = new WebClient(); 
webClient.DownloadFile("pdf file address", @"c:\myfile.pdf"); 

下載文件異步: 下載文件,而不會阻塞主線程使用異步方法DownloadFileAsync。您還可以設置事件處理程序來顯示進度並檢測文件是否已下載。 [C#]:

private void btnDownload_Click(object sender, EventArgs e) 
{ 
    WebClient webClient = new WebClient(); 
    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); 
    webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); 
    webClient.DownloadFileAsync(new Uri("pdf file address"), @"c:\myfile.pdf"); 
} 

private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e) 
{ 
    progressBar.Value = e.ProgressPercentage; 
} 

private void Completed(object sender, AsyncCompletedEventArgs e) 
{ 
    MessageBox.Show("Download completed!"); 
} 

裁判:http://www.csharp-examples.net/download-files/

0

瀏覽器將嘗試顯示該文件,除非你指定不。

嘗試在返回文件之前添加ContentDisposition。

var cd = new System.Net.Mime.ContentDisposition 
    { 
     FileName = filename, 
     Inline = false, 
    }; 
Response.AppendHeader("Content-Disposition", cd.ToString()); 
return File(filename, contentType, FullName);