Asp.net mvc ASP.NET MVC FileStreamResult,未使用fileDownloadName

Asp.net mvc ASP.NET MVC FileStreamResult,未使用fileDownloadName,asp.net-mvc,pdf-generation,filestreamresult,Asp.net Mvc,Pdf Generation,Filestreamresult,下面返回一个PDF,浏览器尝试直接内联显示该PDF。这是正确的。但是,如果我尝试下载该文件,下载名称不是“myPDF.pdf”,而是路由中的ID(myapp/controller/PDFGenerator/ID)。是否可以将文件下载名设置为“myPDF.pdf” 不,这在内嵌显示PDF时是不可能的。如果将内容处置标头作为附件发送,则可以实现此目的: public ActionResult PDFGenerator(int id) { Stream stream = GeneratePDF

下面返回一个PDF,浏览器尝试直接内联显示该PDF。这是正确的。但是,如果我尝试下载该文件,下载名称不是“myPDF.pdf”,而是路由中的ID(myapp/controller/PDFGenerator/ID)。是否可以将文件下载名设置为“myPDF.pdf”


不,这在内嵌显示PDF时是不可能的。如果将内容处置标头作为附件发送,则可以实现此目的:

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

还请注意,我是如何删除了您正在使用的不必要的
MemoryStream
并将PDF加载到内存中的,您可以直接将其流式传输到客户端,这样效率会更高。

如果您使用FileStreamResult下载文件,请尝试在controller中使用此选项

Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment; filename=FileName.pdf");

可以将id设置为表示文件名的字符串,而不带扩展名

public ActionResult PDFGenerator(string id, int? docid)
{
    Stream stream = GeneratePDF(docid);
    return new FileStreamResult(stream , "application/pdf");
}
然后url的结尾是这样的

  ..PDFGenerator/Document2?docid=15

是的,这就是我回答的全部要点。如果希望文件以内联方式显示,则不能指定文件名。如果以内联方式显示PDF文件,则会使用客户端计算机上关联的插件打开该文件以打开PDF文件。不同插件的行为会有所不同。@Nalan M answer在大多数情况下会强制下载。因此,不应该说这是不可能的。一个问题,谁负责处理这里的流?@Legends FileStreamResponse将处理它-请参阅我的导出为PDF操作的上,以纯文本形式返回数据,替换iframe而不是附件类型。我不得不添加这两行,以迫使它弹出保存对话框。
  ..PDFGenerator/Document2?docid=15