How to display open/save dialog asp net mvc 4

20,297

Solution 1

I think you cannot download a file in a browser async, just redirect the user to the action and the browser will open a save dialog window. In asp.net mvc you could have an action method to download a file resulting in a FileResult with the File method of the base controller.

public ActionResult SaveDocument()
{   
    string filePath = Server.MapPath("~/MyPDFs/Pdf1.pdf");
    string contentType = "application/pdf";

    //Parameters to file are
    //1. The File Path on the File Server
    //2. The content type MIME type
    //3. The parameter for the file save by the browser

    return File(filePath, contentType, "Report.pdf");
}

Solution 2

One way to force firefox (doen't work for chrome) to open the save dialogue is to set the contenttype to "application/octet-stream" and give it a filename with the correct extension.

public ActionResult SaveDocument()
{   
    string filePath = Server.MapPath("~/MyPDFs/Pdf1.pdf");
    string contentType = "application/octet-stream";  //<---- This is the magic

    //Parameters to file are
    //1. The File Path on the File Server
    //2. The content type MIME type
    //3. The parameter for the file save by the browser

    return File(filePath, contentType, "Report.pdf");
}
Share:
20,297
Guilherme Longo
Author by

Guilherme Longo

Updated on November 22, 2020

Comments

  • Guilherme Longo
    Guilherme Longo over 3 years

    I am able to request a file and also have it returned. I don´t know how to display a open/save dialog box.

    View:

    function saveDocument() {
        $.ajax({
            url: '/Operacao/saveDocument',
            type: 'POST',
            DataType: "html",
            success: function (data) {
                //I get the file content here
            }
        });
    }
    

    Controller:

    public void saveDocument() {
        Response.ContentType = "image/jpeg";
        Response.AppendHeader("Content-Disposition", "attachment; filename=SailBig.jpg");
        Response.TransmitFile(Server.MapPath("~/MyPDFs/Pdf1.pdf"));    
        Response.End();
    }