在浏览器中打开一个文件,而不是下载它

我有一个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";