Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make a file open in browser instead of downloading it

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?

like image 440
Trevor Avatar asked Oct 16 '13 18:10

Trevor


People also ask

How do I make Chrome open 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.

How do I open attachments instead of downloading?

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.


2 Answers

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 
like image 25
welegan Avatar answered Sep 21 '22 03:09

welegan


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); }  
like image 184
Trevor Avatar answered Sep 18 '22 03:09

Trevor