Make a file open in browser instead of downloading it

前端 未结 4 1565
终归单人心
终归单人心 2020-12-02 10:56

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 th

相关标签:
4条回答
  • 2020-12-02 11:34

    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);
    } 
    
    0 讨论(0)
  • 2020-12-02 11:34

    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
    
    0 讨论(0)
  • 2020-12-02 11:55

    Browsers should decide on downloading or displaying based on mime-type.

    Try this:

    string mimeType = "application/pdf";
    
    0 讨论(0)
  • 2020-12-02 11:55

    Just return PhysicalFileResult and use HttpGet method ,url will open pdf file

    public ActionResult GetPublicLink()
    {
         path = @"D:\Read\x.pdf";
        return new PhysicalFileResult(path, "application/pdf");
    }
    
    0 讨论(0)
提交回复
热议问题