2013-01-03 11 views
5

Sono in grado di richiedere un file e di restituirlo. Non so come visualizzare una finestra di dialogo di apertura/salvataggio.Come visualizzare la finestra di dialogo apri/salva asp net mvc 4

Vista:

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(); 
} 

risposta

7

Penso che non si può scaricare un file in un async del browser, basta reindirizzare l'utente all'azione e si aprirà il browser una finestra di dialogo di salvataggio. In asp.net mvc è possibile avere un metodo di azione per scaricare un file risultante in un FileResult con il metodo File del controller di base.

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"); 
} 
+0

Grazie mille !!! –

+1

Si sta scaricando automaticamente senza chiedere. La finestra di dialogo non viene mostrata! –

+3

Dipende dal browser. Se si imposta il download automatico in una determinata cartella, il browser verrà scaricato automaticamente. Firefox e Chrome sono alcuni browser con questo comportamento. –

1

Un modo per forzare firefox (doen't lavoro per Chrome) per aprire il dialogo di salvataggio è quello di impostare il ContentType a "application/octet-stream" e dargli un nome di file con l'estensione corretta.

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"); 
} 
Problemi correlati