无法在MVC中下载PDF

时间:2015-07-16 13:53:02

标签: asp.net-mvc-4 pdf iis

我创建了一个方法,可以将pdf创建并保存到项目中的目录中。但是在创建后我无法将此文件下载。我已经尝试了几个我在堆栈溢出和其他许多站点上看到的选项。我可以在firebug的响应中看到PDF内容,我可以手动打开文件,但没有文件下载。请帮忙。

控制器

    public class SignatureController : Controller
    {
    // GET: Signature
    public FileContentResult Index(string orderNumber)
    {
        var pdfFile = DocumentGenerator.GenerateSignedDocument(orderNumber);

        byte[] filedata = System.IO.File.ReadAllBytes(pdfFile);
        string contentType = MimeMapping.GetMimeMapping(pdfFile);

        System.Net.Mime.ContentDisposition cd = new System.Net.Mime.ContentDisposition
        {
            FileName = pdfFile,
            Inline = true,
        };

        Response.AppendHeader("Content-Disposition", cd.ToString());

        return File(filedata, contentType);
    }
}

PDF生成器

        public static string GenerateSignedDocument(string orderNumber)
        {

      ...............

        string currentDate = DateTime.Now.ToString("MMddyyyy");

        string fileName = HostingEnvironment.MapPath(pdfTempPath) + orderNumber + currentDate + ".pdf";

        pdfDocument.Save(fileName);
        return fileName;
    }

标题正在返回

缓存控制
私人的 内容处置 附件; filename =“signed document.pdf” 内容编码
gzip的 内容类型
应用程序/ PDF格式 日期
星期四,2015年7月16日16:58:29 GMT 服务器
微软-IIS / 8.0 传输编码
分块 改变
接受编码 X-ASPNET-版本
4.0.30319 X-AspNetMvc-版本 5.2 X供电,通过
ASP.NET X-SourceFiles
=?UTF-8 2 B 4 QzpcVXNlcnNccmphbWVzXFNvdXJjZVxXb3Jrc3BhY2VzXEN1c3RvbWVyUGlja1VwXEN1c3RvbWVyUGlja1VwLldlYlxTaWduYXR1cmVcSW5kZXg =?=

1 个答案:

答案 0 :(得分:0)

Inline设为false或省略它。这样标头就是attachment(而不是inline)。

例如(此示例在文件系统中下载文件)

public FilePathResult DownloadPdf()
{
    var cd = new System.Net.Mime.ContentDisposition
    {
        FileName = "foo.pdf"
        //Inline = false //false or omit
    };


    Response.AppendHeader("Content-Disposition", cd.ToString());
    return File("~/files/somefile.pdf", "application/pdf");
}

标题如下:Content-Disposition:attachment; filename=foo.pdf

文件名是您设置的 - 样本只是从文件系统获取pdf,因为我没有动态生成(因此您的代码适用于byte结果)。关键项目是返回正确的标题attachment - 您甚至可以手动设置

Response.AppendHeader("Content-Disposition", "attachment; filename=" + pdfFile);

而不必使用System.Net.Mime.ContentDisposition。顺便说一句,你的pdfFile变量是一个字符串(你将它用作FileName属性)?

... H个