gpt4 book ai didi

c# - 在浏览器中打开文件而不是下载它

转载 作者:IT王子 更新时间:2023-10-29 03:51:36 26 4
gpt4 key购买 nike

我有一个 MVC 项目,它将向用户显示一些文档。这些文件当前存储在 Azure Blob 存储中。

目前,文档是通过以下 Controller 操作检索的:

[GET("{zipCode}/{loanNumber}/{classification}/{fileName}")]
public ActionResult GetDocument(string zipCode, string loanNumber, string classification, string fileName)
{
// get byte array from blob storage
byte[] doc = _docService.GetDocument(zipCode, loanNumber, classification, fileName);
string mimeType = "application/octet-stream";
return File(doc, mimeType, fileName);
}

现在,当用户单击如下链接时:

<a target="_blank" href="http://...controller//GetDocument?zipCode=84016&loanNumber=12345678classification=document&fileName=importantfile.pdf

然后,文件将下载到浏览器的下载文件夹中。我希望发生的情况(我认为这是默认行为)是让文件简单地显示在浏览器中。

我尝试更改 mimetype 并将返回类型更改为 FileResult 而不是 ActionResult,但均无济于事。

如何让文件显示在浏览器中而不是下载?

最佳答案

感谢所有答案,解决方案是所有这些答案的组合。

首先,因为我使用的是 byte[], Controller 操作需要是 FileContentResult 而不仅仅是 FileResult。发现此感谢:What's the difference between the four File Results in ASP.NET MVC

其次,mime 类型不能是 octet-stream。据说,使用流会导致浏览器只下载文件。我必须更改类型application/pdf。不过,我需要探索更强大的解决方案来处理其他文件/mime 类型。

第三,我必须添加一个 header ,将 content-disposition 更改为 inline。使用this post我发现我必须修改我的代码以防止重复的 header ,因为内容处置已被设置为附件

成功的代码:

public FileContentResult GetDocument(string zipCode, string loanNumber, string classification, string fileName)
{
byte[] doc = _docService.GetDocument(zipCode, loanNumber, classification, fileName);
string mimeType = "application/pdf"
Response.AppendHeader("Content-Disposition", "inline; filename=" + fileName);
return File(doc, mimeType);
}

关于c# - 在浏览器中打开文件而不是下载它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19411335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com