下面返回该浏览器尝试直接显示内嵌的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
发布评论