Em WebForms, normalmente teria um código como este para permitir que o navegador apresentasse um pop-up "Baixar arquivo" com um tipo de arquivo arbitrário, como um PDF, e um nome de arquivo:
Response.Clear()
Response.ClearHeaders()
''# Send the file to the output stream
Response.Buffer = True
Response.AddHeader("Content-Length", pdfData.Length.ToString())
Response.AddHeader("Content-Disposition", "attachment; filename= " & Server.HtmlEncode(filename))
''# Set the output stream to the correct content type (PDF).
Response.ContentType = "application/pdf"
''# Output the file
Response.BinaryWrite(pdfData)
''# Flushing the Response to display the serialized data
''# to the client browser.
Response.Flush()
Response.End()
Como faço para realizar a mesma tarefa no ASP.NET MVC?
asp.net-mvc
download
Mgnoonan
fonte
fonte
Para forçar o download de um arquivo PDF, em vez de ser manipulado pelo plug-in PDF do navegador:
Se você quiser que o navegador funcione por padrão (plugin ou download), basta enviar dois parâmetros.
Você precisará usar o terceiro parâmetro para especificar um nome para o arquivo na caixa de diálogo do navegador.
ATUALIZAÇÃO: Charlino está certo, ao passar o terceiro parâmetro (nome do arquivo de download)
Content-Disposition: attachment;
é adicionado ao Cabeçalho de Resposta Http. Minha solução foi enviarapplication\force-download
como mime-type, mas isso gera um problema com o nome do arquivo do download, então o terceiro parâmetro é necessário para enviar um bom nome de arquivo, eliminando assim a necessidade de forçar um download .fonte
content-disposition: attachment; filename=MyRenamedFile.pdf
- é isso que força o download. Eu sugiro que você coloque o tipo MIME de voltaapplication/pdf
.Content-Disposition: attachment;
relação.Você pode fazer o mesmo no Razor ou no Controller, assim ..
Ou no controlador ..
Eu tentei isso no Chrome e no IE9, ambos estão baixando o arquivo pdf.
Provavelmente, devo acrescentar que estou usando o RazorPDF para gerar meus PDFs. Aqui está um blog sobre isso: http://nyveldt.com/blog/post/Introducing-RazorPDF
fonte
Você deve olhar para o método File do Controller. É exatamente para isso que serve. Ele retorna um FilePathResult em vez de um ActionResult.
fonte
mgnoonan,
Você pode fazer isso para retornar um FileStream:
fonte
Embora os resultados de ação padrão FileContentResult ou FileStreamResult possam ser usados para fazer download de arquivos, para reutilização, criar um resultado de ação personalizada pode ser a melhor solução.
Como exemplo, vamos criar um resultado de ação personalizado para exportar dados para arquivos do Excel dinamicamente para download.
A classe ExcelResult herda a classe ActionResult abstrata e substitui o método ExecuteResult.
Estamos usando o pacote FastMember para criar DataTable a partir do objeto IEnumerable e o pacote ClosedXML para criar um arquivo Excel a partir de DataTable.
No Controlador, use o resultado da ação ExcelResult personalizado da seguinte forma
Uma vez que estamos baixando o arquivo usando HttpGet, crie uma Visualização vazia sem modelo e layout vazio.
Postagem de blog sobre o resultado da ação personalizada para o download de arquivos criados dinamicamente:
https://acanozturk.blogspot.com/2019/03/custom-actionresult-for-files-in-aspnet.html
fonte
Use o tipo de arquivo .ashx e use o mesmo código
fonte