Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Для отправки клиенту файлов предназначен FileResult. Однако так как это абстрактный класс, то фактически мы будем иметь дело с его наследниками:
FileContentResult: отправляет клиенту массив байтов, считанный из файла
FilePathResult: представляет простую отправку файла напрямую с сервера
FileStreamResult: данный класс создает поток - объект System.IO.Stream, с помощью которого считывает и отправляет файл клиенту
Во всех трех случаях для отправки файлов применяется метод File, который и возвращает объект FileResult. Только в зависимости от выбранного способа используется соответствующая перегруженная версия этого метода.
Чтобы отправить файл из файловой системы (то есть использование объекта FilePathResult), нам надо указать в методе File три параметра: путь к файлу на стороне сервера, тип содержимого и имя файла для принимающей стороны (имя файла необязательно, и можно обойтись в принципе только двумя параметрами).
public FileResult GetFile() { // Путь к файлу string file_path = Server.MapPath("~/Files/PDFIcon.pdf"); // Тип файла - content-type string file_type="application/pdf"; // Имя файла - необязательно string file_name = "PDFIcon.pdf"; return File(file_path,file_type,file_name); }
Предполагается, что у нас в проекте есть папка Files, в которой лежит файл PDFIcon.pdf. Метод Server.MapPath позволяет построить
полный путь к ресурсу из каталога в проекте. Но также можно использовать и абсолютные пути,
обращаясь к любому файлу в файловой системе, например, string file_path = @"C:\Book\PDFIcon.pdf";
И, при обращении, например, по пути Home/GetFile нам будет предложено сохранить данный файл на локальном компьютере.
Похожим образом работает и классы FileContentResult, только вместо имени файла в методе File указывается массив байтов, в который был считан файл:
// Отправка массива байтов public FileResult GetBytes() { string path = Server.MapPath("~/Files/PDFIcon.pdf"); byte[] mas = System.IO.File.ReadAllBytes(path); string file_type = "application/pdf"; string file_name = "PDFIcon.pdf"; return File(mas, file_type, file_name); }
И если мы хотим возвратить объект FileStreamResult, то в качестве первого аргумента в методе File идет объект Stream для отправляемого файла:
// Отправка потока public FileResult GetStream() { string path = Server.MapPath("~/Files/PDFIcon.pdf"); // Объект Stream FileStream fs = new FileStream(path, FileMode.Open); string file_type = "application/pdf"; string file_name = "PDFIcon.pdf"; return File(fs, file_type, file_name); }