在C#中下载PDF文件

时间:2014-09-30 21:59:55

标签: c# asp.net-mvc pdf download

在我的应用程序中,我想为用户提供下载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>

单击“下载”,文件将被打开浏览器。

3 个答案:

答案 0 :(得分:0)

将您的内容类型设置为&#34; application / octet-stream&#34;所以PDF插件不会尝试拿起并显示它。然后浏览器将把它作为文件下载来处理。

答案 1 :(得分: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/

答案 2 :(得分:0)

除非您指定不,否则浏览器将尝试显示该文件。

在返回File之前尝试添加ContentDisposition。

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