В WebForms у меня обычно есть такой код, позволяющий браузеру отображать всплывающее окно «Загрузить файл» с произвольным типом файла, например PDF, и именем файла:
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()
Как выполнить ту же задачу в ASP.NET MVC?
asp.net-mvc
download
мгнунан
источник
источник
Чтобы принудительно загрузить файл PDF вместо того, чтобы обрабатывать его плагином PDF в браузере:
Если вы хотите, чтобы браузер работал по умолчанию (плагин или загрузка), просто отправьте два параметра.
Вам нужно будет использовать третий параметр, чтобы указать имя файла в диалоговом окне браузера.
ОБНОВЛЕНИЕ: Чарлино прав, при передаче третьего параметра (имя файла загрузки)
Content-Disposition: attachment;
добавляется в заголовок ответа Http. Мое решение состояло в том, чтобы отправитьapplication\force-download
как mime-тип, но это создает проблему с именем файла для загрузки, поэтому третий параметр требуется для отправки хорошего имени файла, что устраняет необходимость принудительной загрузки .источник
content-disposition: attachment; filename=MyRenamedFile.pdf
- это то, что вызывает загрузку. Я бы посоветовал вам вернуть тип MIMEapplication/pdf
.Content-Disposition: attachment;
отношения.Вы можете сделать то же самое в Razor или в контроллере, вот так ..
Или в Контроллере ..
Я пробовал это в Chrome и IE9, оба загружают файл pdf.
Я, наверное, должен добавить, что использую RazorPDF для создания своих PDF-файлов. Вот блог об этом: http://nyveldt.com/blog/post/Introduction-RazorPDF
источник
Вы должны посмотреть на метод File контроллера. Это именно то, для чего он нужен. Он возвращает FilePathResult вместо ActionResult.
источник
мгнунан,
Вы можете сделать это, чтобы вернуть FileStream:
источник
Хотя стандартные результаты действия FileContentResult или FileStreamResult могут использоваться для загрузки файлов, для повторного использования создание результата настраиваемого действия может быть лучшим решением.
В качестве примера давайте создадим результат настраиваемого действия для экспорта данных в файлы Excel на лету для загрузки.
Класс ExcelResult наследует абстрактный класс ActionResult и переопределяет метод ExecuteResult.
Мы используем пакет FastMember для создания DataTable из объекта IEnumerable и пакет ClosedXML для создания файла Excel из DataTable.
В контроллере используйте результат настраиваемого действия ExcelResult следующим образом
Поскольку мы загружаем файл с помощью HttpGet, создайте пустой вид без модели и пустой макет.
Сообщение в блоге о результате настраиваемого действия для загрузки файлов, которые создаются на лету:
https://acanozturk.blogspot.com/2019/03/custom-actionresult-for-files-in-aspnet.html
источник
Используйте тип файла .ashx и используйте тот же код
источник