ASP.NET MVC FileStreamResult,不使用fileDownloadName [英] ASP.NET MVC FileStreamResult, fileDownloadName is not used

查看:923
本文介绍了ASP.NET MVC FileStreamResult,不使用fileDownloadName的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面返回该浏览器尝试直接显示内嵌的PDF文件。这正常工作。但是,如果我尝试下载该文件,下载的名称不是myPDF.pdf,而是在路由(MyApp的/控制器/的pdfGenerator / ID)的ID。是否有可能设置文件下载名称为myPDF.pdf?

 公共FileStreamResult的pdfGenerator(INT ID)
{
    的MemoryStream毫秒​​= GeneratePDF(ID);    字节[] =文件ms.ToArray();
    MemoryStream的输出=新的MemoryStream();
    output.Write(文件,0,file.Length);
    output.Position = 0;
    HttpContext.Response.AddHeader(内容处置,
    内联;文件名= myPDF.pdf);    返回文件(输出应用程序/ PDF,fileDownloadName =myPDF.pdf);
}


解决方案

没有,这是不可能用PDF内嵌显示。你可以做到这一点,如果你发送的内容处理标头作为附件:

 公众的ActionResult的pdfGenerator(INT ID)
{
    流流= GeneratePDF(ID);
    返回文件(流应用程序/ PDF,myPDF.pdf);
}

还要注意我如何删除不必要的的MemoryStream 你正在使用和加载在内存中的PDF在那里你可以把它直接传输到客户端这将有更为高效

The following returns a PDF which the browser tries to directly display inline. This works correctly. However, if I try to download the file, the download name is not "myPDF.pdf", but instead the ID in the route (myapp/controller/PDFGenerator/ID). Is it possible to set the file download name to be "myPDF.pdf"?

public FileStreamResult PDFGenerator(int id)
{
    MemoryStream ms = GeneratePDF(id);

    byte[] file = ms.ToArray();
    MemoryStream output = new MemoryStream();
    output.Write(file, 0, file.Length);
    output.Position = 0;
    HttpContext.Response.AddHeader("content-disposition", 
    "inline; filename=myPDF.pdf");

    return File(output, "application/pdf", fileDownloadName="myPDF.pdf");
}

解决方案

No, this is not possible with a PDF displayed inline. You could achieve this if you send the Content-Disposition header with as an attachment:

public ActionResult PDFGenerator(int id)
{
    Stream stream = GeneratePDF(id);
    return File(stream, "application/pdf", "myPDF.pdf");
}

Also notice how I removed the unnecessary MemoryStream you were using and loading the PDF in memory where you could have directly streamed it to the client which would have been far more efficient.

这篇关于ASP.NET MVC FileStreamResult,不使用fileDownloadName的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆