I have an MVC project that will display some documents to users. The files are currently stored in Azure blob storage.
Currently, the documents are retrieved from the following controller action:
[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); }
Right now, when a user clicks on a link like the following:
<a target="_blank" href="http://...controller//GetDocument?zipCode=84016&loanNumber=12345678classification=document&fileName=importantfile.pdf
Then, the file downloads to their browser's downloads folder. What I would like to happen (and I thought was default behavior) is for the file to simply be displayed in the browser.
I have tried changing the mimetype and changing the return type to FileResult instead of ActionResult, both to no avail.
How can I make the file display in the browser instead of downloading?
Alternatively, enter chrome://settings/content/ in the address bar. On the right, go to the Content section, and click on Additional content settings. Click on PDF documents. On the next page, turn on (enable) the Download PDF files instead of automatically opening them in Chrome option.
Click Start, then Programs (or All Programs) and find Windows Explorer. Now, click Tools > Folder Options and click on the File Types tab. The Edit File Type dialog has two options that decide how your Word documents open: Confirm open after download, and Browse in same window.
It looks like someone else asked a similar question a while ago:
how to force pdf files to open in a browser
With an answer saying that you should use the header:
Content-Disposition: inline; filename.pdf
Thanks to all the answers, the solution was a combination of all of them.
First, because I was using a byte[]
the controller action needed to be FileContentResult
not just FileResult
. Found this thanks to: What's the difference between the four File Results in ASP.NET MVC
Second, the mime type needed to NOT be a octet-stream
. Supposedly, using the stream causes the browser to just download the file. I had to change the type application/pdf
. I will need to explore a more robust solution to handle other file/mime types though.
Third, I had to add a header that changed the content-disposition
to inline
. Using this post I figured out I had to modify my code to prevent duplicate headers, since the content-disposition was already being set to attachment
.
The successful code:
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); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With