W formularzach internetowych zwykle miałbym taki kod, aby przeglądarka wyświetlała wyskakujące okienko „Pobierz plik” z dowolnym typem pliku, takim jak PDF, i nazwą pliku:
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()
Jak mogę wykonać to samo zadanie w ASP.NET MVC?
asp.net-mvc
download
mgnoonan
źródło
źródło
Aby wymusić pobranie pliku PDF zamiast obsługiwać go przez wtyczkę PDF przeglądarki:
Jeśli chcesz, aby przeglądarka działała zgodnie z domyślnym zachowaniem (wtyczka lub pobieranie), po prostu wyślij dwa parametry.
Musisz użyć trzeciego parametru, aby określić nazwę pliku w oknie dialogowym przeglądarki.
AKTUALIZACJA: Charlino ma rację, po przekazaniu trzeciego parametru (nazwa pliku do pobrania)
Content-Disposition: attachment;
zostaje dodany do nagłówka odpowiedzi HTTP. Moim rozwiązaniem było wysłanieapplication\force-download
jako typu MIME, ale generuje to problem z nazwą pliku do pobrania, więc trzeci parametr jest wymagany do przesłania dobrej nazwy pliku, co eliminuje potrzebę wymuszania pobierania .źródło
content-disposition: attachment; filename=MyRenamedFile.pdf
- to wymusza pobieranie. Sugerowałbym przywrócenie typu MIME doapplication/pdf
.Content-Disposition: attachment;
relacji.Możesz zrobić to samo w Razor lub w kontrolerze, na przykład.
Lub w kontrolerze ...
Wypróbowałem to w Chrome i IE9, oba pobierają plik pdf.
Prawdopodobnie powinienem dodać, że używam RazorPDF do generowania moich plików PDF. Oto blog na ten temat: http://nyveldt.com/blog/post/Introducing-RazorPDF
źródło
Powinieneś spojrzeć na metodę pliku kontrolera. Właśnie do tego służy. Zwraca FilePathResult zamiast ActionResult.
źródło
mgnoonan,
Możesz to zrobić, aby zwrócić FileStream:
źródło
Chociaż standardowe wyniki akcji FileContentResult lub FileStreamResult mogą być używane do pobierania plików, w celu ponownego wykorzystania najlepszym rozwiązaniem może być utworzenie wyniku akcji niestandardowej.
Jako przykład utwórzmy wynik akcji niestandardowej do eksportowania danych do plików programu Excel w locie w celu pobrania.
Klasa ExcelResult dziedziczy abstrakcyjną klasę ActionResult i przesłania metodę ExecuteResult.
Używamy pakietu FastMember do tworzenia DataTable z obiektu IEnumerable i pakietu ClosedXML do tworzenia pliku Excel z DataTable.
W kontrolerze użyj wyniku niestandardowej akcji ExcelResult w następujący sposób
Ponieważ pobieramy plik za pomocą HttpGet, utwórz pusty widok bez modelu i pustego układu.
Wpis na blogu dotyczący wyniku akcji niestandardowej do pobierania plików tworzonych w locie:
https://acanozturk.blogspot.com/2019/03/custom-actionresult-for-files-in-aspnet.html
źródło
Użyj typu pliku .ashx i użyj tego samego kodu
źródło