在浏览器中打开一个文件,而不是下载它
我有一个MVC项目,将显示一些文件给用户。 这些文件当前存储在Azure blob存储中。
目前,从以下控制器操作中检索文档:
[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和改变返回typesFileResult而不是ActionResult,都无济于事。
我怎样才能让浏览器中的文件显示而不是下载?
感谢所有的答案,解决scheme是所有这些的组合。
首先,因为我使用的是byte[]
所以控制器操作需要FileContentResult
而不仅仅是FileResult
。 find这个感谢: ASP.NET MVC中的四个文件结果有什么区别
其次,mimetypes不是一个octet-stream
。 据说,使用stream会导致浏览器下载文件。 我不得不改变types的application/pdf
。 我将需要探索一个更强大的解决scheme来处理其他文件/ MIMEtypes。
第三,我不得不添加一个标题,将content-disposition
改为inline
。 使用这个职位,我想我不得不修改我的代码,以防止重复的标题,因为内容处置已被设置为attachment
。
成功的代码:
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); }
前段时间有人问过类似的问题:
如何强制PDF文件在浏览器中打开
回答说你应该使用标题:
Content-Disposition: inline; filename.pdf
浏览器应该根据MIMEtypes决定下载或显示。
尝试这个:
string mimeType = "application/pdf";