在我的应用程序中,我想为用户提供下载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 :(得分: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!");
}
答案 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);