2016-02-06 16 views
13

Non riesco a trovare un riferimento al download di un file utilizzando MVC Core.Scarica file utilizzando MVC Core

Abbiamo un unico file exe per i membri da scaricare dal nostro sito web. In passato abbiamo inserito

<a href=(file path)> Download < /a> per fare clic sui nostri utenti. Mi piacerebbe fare qualcosa di equivalente a MVC Nucleo lungo le linee di

<a [email protected]["DownloadLink"]> Download < /a> 

con Downloadlink popolate con il percorso del file.

public class DownloadController : Controller 
{ 
    [HttpGet] 
    public IActionResult Index() 
    { 
     ViewData["DownloadLink"] = ($"~/Downloads/{V9.Version}.exe"); 
     return View(); 
    } 
} 

`

Il collegamento <a [email protected]["DownloadLink"]> Download < /a> ottiene il percorso corretto, ma quando si fa clic rende solo il percorso nella barra degli indirizzi. C'è un modo semplice per impostare un link per il download?

+1

La vostra azione dovrebbe restituire un risultato contenuto, non la vista. Guarda nel metodo Controller.File. –

risposta

22

ho usato this risposta inviato da @Tieson T a venire con questa soluzione

public FileResult Download() 
    { 
     var fileName = $"{V9.Version}.exe"; 
     var filepath = $"Downloads/{fileName}"; 
     byte[] fileBytes = System.IO.File.ReadAllBytes(filepath); 
     return File(fileBytes, "application/x-msdownload", fileName); 
    } 

La vista è ora

<a asp-action="Download" asp-> 
Download 

@Ageonix è stato anche corretto su non richiede il ~ per arrivare a wwwroot

+0

'return File', questo file è una classe statica, come posso usarlo in .Net Core 2.0? –

+0

Il file è un metodo statico in "Microsoft.AspNetCore.Mvc.ControllerBase" che restituisce "FileContentResult". È simile a "Ok()" o "NotFound()". FileContentResult è StatusResult proprio come OkResult. –

1

Non sono da qualche parte dove posso provarlo, ma una cosa del genere farebbe il trucco?

<a href="<%= Url.Content('~/Downloads/{ V9.Version}.exe') %>"> Download </a> 
+0

Grazie a @Ageonix per il suggerimento, ma VS2015 si lamenta che a href manca una parentesi angolare di chiusura. Suppongo che sia quello di fare il doppio virgolette tra virgolette, ma non riesco a farlo bene. – Vague

+0

Oops. Prova invece a usare un segno di spunta su quelle virgolette interne. – Ageonix

+1

Non sono sicuro di come sia la struttura del tuo sito, ma se ne ottieni 400 sei sicuro di aver bisogno della tilde (~)? In altre parole, hai ricontrollato per vedere se stai andando nel posto giusto? – Ageonix

-4

Nella versione precedente è possibile utilizzare WebClient per scaricare il file dall'URL.

Che è stato sostituito con HttpClient in ASPNet Core.

vedere come usare HttpClient per scaricare un file da URL qui Using WebClient in ASP.NET 5