在具有名称的浏览器中使用ASP.NET MVC FileContentResult流文件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (33)

有没有一种方法可以在具有特定名称的浏览器中使用ASP.NET MVC FileContentResult来流式传输文件?

我注意到你可以有一个FileDialog(打开/保存),或者你可以在浏览器窗口中流式传输文件,但是当你尝试保存文件时,它会使用ActionName。

我有以下情况:

byte[] contents = DocumentServiceInstance.CreateDocument(orderId, EPrintTypes.Quote);
result = File(contents, "application/pdf", String.Format("Quote{0}.pdf", orderId));

当我使用这个,我可以流的字节,但打开/保存文件对话框给予用户。我想实际上在浏览器窗口中传输此文件。

如果我只是使用FilePathResult,它会在浏览器窗口中显示文件,但是当我点击“保存”按钮将文件保存为PDF时,它会显示Action Name作为文件的名称。

有没有人遇到过这个?

提问于
用户回答回答于

实际上,最简单的方法是做以下事情...

byte[] content = your_byte[];

FileContentResult result = new FileContentResult(content, "application/octet-stream") 
                 {
                     FileDownloadName = "your_file_name"
                 };

return result;
用户回答回答于
public ActionResult Index()
{
    byte[] contents = FetchPdfBytes();
    return File(contents, "application/pdf", "test.pdf");
}

在浏览器中打开PDF时,需要将Content-Disposition标题:

public ActionResult Index()
{
    byte[] contents = FetchPdfBytes();
    Response.AddHeader("Content-Disposition", "inline; filename=test.pdf");
    return File(contents, "application/pdf");
}

扫码关注云+社区