如何指定从浏览器保存pdf的名称

时间:2016-10-14 19:21:43

标签: asp.net asp.net-mvc google-chrome pdf browser

ASP.NET MVC 4控制器转发pdf:

    public ActionResult Pdf()  {

        byte[] result = CreatePDF();
        var ms = new MemoryStream(result);
        return new FileStreamResult(ms, "application/pdf");
    }

结果显示在Chrome浏览器窗口中。 如果用户右键单击pdf并选择另存为Chrome,则提供Pdf.pdf作为要保存的文件名。

如何指定其他默认文件名,例如Order 123.pdf

Chrome开发者工具显示文件时没有明确说明:

Cache-Control:private, s-maxage=0
Content-Length:30814
Content-Type:application/pdf
Date:Fri, 14 Oct 2016 19:18:09 GMT
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319

2 个答案:

答案 0 :(得分:1)

尝试使用File方法。

public FileResult Pdf()  
{
    byte[] result = CreatePDF();
    string fileName = "Order 123.pdf";
    return File(result, "application/pdf", fileName);
}

无需在result

中包裹MemoryStream

答案 1 :(得分:0)

FileStreamResultFileDownloadName属性,您可以设置

public ActionResult Pdf()
{
    byte[] result = CreatePDF();
    var ms = new MemoryStream(result);
    var fs = new FileStreamResult(ms, "application/pdf") {FileDownloadName = "Hello.pdf"};
    return fs;
}

这正是您调用ControllerBase.File方法的overload which takes the file name时所发生的情况。

public ActionResult Pdf()
{
    byte[] result = CreatePDF();      
    return File(result ,"application/pdf","Hello.pdf");
}