2010-11-16 71 views
2

我有一个pdf,并希望为用户提供一个简单的“下载”链接。 这怎么做?如何在MVC2中强制下载?

我的想法是
- 计算URL到服务器端的PDF文档,并将其存储在“viewmodel.PDFURL”,
- 添加<a href=...>到调用函数的观点。
- 此功能将使用

$.post("ForcePDFDownload", { PDFURL: <%: Model.PDFURL %> }); 

调用这个服务器端方法:

[HttpPost] 
public JsonResult ForcePDFDownload(string PDFURL) 
{ 
    string path = Path.GetFullPath(PDFURL); 
    string filename = Path.GetFileName(PDFURL); 
    Response.AppendHeader("content-disposition", "attachment; filename=" + filename); 
    Response.ContentType = "application/pdf"; 
    Response.WriteFile(path); 
    Response.End(); 

    return null; 
} 

return null;没有意义的我,但梅索德必须返回的东西,否则不会的Visual Studio编译...

有什么想法?

在此先感谢!

回答

3

不需要使用JSON,ajax,jquery或其他。简单地说:

public ActionResult ForcePDFDownload(string PDFURL) 
{ 
    string path = Path.GetFullPath(PDFURL); 
    string filename = Path.GetFileName(PDFURL); 
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename); 
    return File(path, "application/pdf"); 
} 

然后构造一个链接:

<%: Html.ActionLink("Download PDF", "ForcePDFDownload", new { PDFURL = Model.PDFURL }) %> 

您的服务器作为一个黑客可以总是在他最喜欢的浏览器中键入以下地址上露出这样的行动时要格外小心:

http://foo.com/somecontroller/forcepdfdownload/?pdfurl=c%3A%5Cmycreditcardnumbers.txt 

并快乐地过着他的余生:-)

+0

哇!这很快,非常好! 非常感谢!作品! – user415876 2010-11-16 09:51:34