以下内容返回PDF,浏览器会尝试直接显示内联。这工作正常。但是,如果我尝试下载该文件,则下载名称不是“myPDF.pdf”,而是路由中的ID(myapp / controller / PDFGenerator / ID)。是否可以将文件下载名称设置为“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");
}
答案 0 :(得分:17)
不,内联显示PDF是不可能的。如果您将Content-Disposition标头作为附件发送,则可以实现此目的:
public ActionResult PDFGenerator(int id)
{
Stream stream = GeneratePDF(id);
return File(stream, "application/pdf", "myPDF.pdf");
}
另请注意我是如何删除您正在使用的不必要的MemoryStream
并将PDF加载到内存中,您可以将其直接传输到客户端,这样效率会更高。
答案 1 :(得分:4)
如果您使用FileStreamResult下载文件,请尝试在控制器中使用此文件
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment; filename=FileName.pdf");
答案 2 :(得分:0)
可以通过使id成为表示没有扩展名的文件名的字符串。
public ActionResult PDFGenerator(string id, int? docid)
{
Stream stream = GeneratePDF(docid);
return new FileStreamResult(stream , "application/pdf");
}
然后,网址会像这样结束
..PDFGenerator/Document2?docid=15