2014-09-07 14 views
5

Ho un progetto MVC in cui mi piacerebbe che l'utente fosse in grado di scaricare un file excel con un clic di un pulsante. Ho il percorso per il file e non riesco a trovare la mia risposta tramite google.Come scaricare un file sul client dal server?

mi piacerebbe essere in grado di fare questo con un semplice pulsante che ho sulla mia pagina cshtml:

<button>Button 1</button> 

Come posso fare questo? Qualsiasi aiuto è molto apprezzato!

risposta

11

Se il file non si trova all'interno delle cartelle dell'applicazione e non è accessibile direttamente dal client, è possibile che venga eseguita un'azione del controller che invierà il contenuto del file al client. Ciò potrebbe essere realizzato restituendo un FileResult dalla tua azione di controllo utilizzando il metodo File:

public ActionResult Download() 
{ 
    string file = @"c:\someFolder\foo.xlsx"; 
    string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
    return File(file, controntType, Path.GetFileName(file)); 
} 

e quindi sostituire il pulsante con un ancoraggio che punta a questa azione di controllo:

@Html.ActionLink("Button 1", "Download", "SomeController") 

In alternativa all'utilizzo di un ancoraggio è anche possibile utilizzare un modulo html:

@using (Html.BeginForm("Download", "SomeController", FormMethod.Post)) 
{ 
    <button type="submit">Button 1</button> 
} 

Se il file si trova all'interno di alcuni non accessibili dalla cartella client di l'applicazione come ad esempio App_Data si potrebbe utilizzare il metodo MapPath per costruire il percorso fisico completo a questo file utilizzando un percorso relativo:

string file = HostingEnvironment.MapPath("~/App_Data/foo.xlsx"); 
+0

cosa se il file in un altro server? diciamo che il nome del server è "VUP-1"? e diciamo che il percorso è "c: \ someFolder \ foo.xlsx" -> nel server VUP-1 –

2

HTML:

<div>@Html.ActionLink("UI Text", "function_name", "Contoller_name", new { parameterName = parameter_value },null) </div> 

Controller:

public FileResult download(string filename) { 
     string path = ""; 
     var content_type = ""; 
     path = Path.Combine("D:\file1", filename); 

     if (filename.Contains(".pdf")) 
     { 
      content_type = "application/pdf"; 
     } 
     return File(path, content_type, filename); 
} 
Problemi correlati