Введение
В этой статье мы увидим, как загружать файлы в основное веб-приложение asp.net и сохранять их в корневом каталоге приложения. Здесь мы собираемся использовать IFormFile для загрузки файлов. Здесь мы также увидим, как передавать другие данные с файлом.
В этой статье
- Что такое IFormFile
- Создать основной проект Asp.Net
- Загрузить один файл
- Загрузить несколько файлов
Что такое IFormFile
В ASP.NET Core появился интерфейс IFormFile, который представляет файлы, передаваемые в HTTP-запросе. Интерфейс дает нам доступ к таким метаданным, как ContentDisposition, ContentType, Length, FileName и другим. IFormFile также предоставляет некоторые методы, используемые для хранения файлов. Интерфейс IFormFile также позволяет нам читать содержимое файла через доступный поток.
Создать основной проект Asp.Net
Шаг 1. Откройте Visual Studio и нажмите «Создать новый проект».
Шаг 2.Выберите ASP.Net Core Web App (MVC) и нажмите кнопку "Далее".
Шаг 3. На следующем экране введите следующие данные и нажмите кнопку «Далее».
- название проекта
- Место, где вы хотите хранить свой проект
- Конфигурация решения, например создание нового или использование старого и размещение решения в той же папке.
Шаг 4: На следующем экране настройте другие параметры или оставьте значения по умолчанию и нажмите кнопку «Создать».
Шаг 5:Теперь наш проект создан с домашним контроллером по умолчанию, но здесь мы создаем новый контроллер для наших операций.
Чтобы добавить новый контроллер, щелкните правой кнопкой мыши папку «Контроллеры» и выберите «Добавить», затем «Контроллер».
Выберите «Контроллер» в левом фильтре, затем выберите «Контроллер MVC — Пусто» и нажмите кнопку «Добавить». Затем введите здесь имя контроллера. Я ввожу UploadController.
Шаг 6:Теперь нам нужно создать модель в папке Models. который мы собираемся использовать для передачи данных из представления в контроллер.
Здесь мы создаем три модели, как показано ниже.
ResponseModel: эта модель содержит три свойства: IsResponse, IsSuccess и Message. Эта модель будет унаследована двумя другими, и мы используем ее как статус ответа и сообщение после выполнения некоторой операции.
SingleFileModel: мы будем использовать эту модель для загрузки одного файла за раз. Эта модель содержит два свойства FileName, которые мы будем использовать в качестве имени файла при сохранении файла на сервере. И другой файл, который является типом IFormFile. Оба свойства имеют атрибуты обязательных аннотаций данных для отображения проверки пользователю.
MultipleFilesModel: мы будем использовать эту модель для одновременного хранения нескольких файлов. Эта модель содержит только одно свойство, которое является типом списка IFormFile.
Загрузить один файл
Шаг 1.Создайте представление загрузки одного файла. Здесь я использовал для этого метод действия индекса. Из индекса мы передаем нашу модель SingleFileModel в представление для доступа к его свойствам на стороне представления.
Чтобы добавить представление, щелкните правой кнопкой мыши метод действия и выберите «Добавить представление».
Затем выберите View в левой части фильтра, а затем выберите Razor View — Empty. Затем нажмите кнопку «Добавить».
Шаг 2.Теперь наше представление создано. Теперь нам нужно создать дизайн для нашего представления. Здесь я использую простой дизайн для лучшего понимания.
Пояснение
- Как вы можете видеть в приведенном выше фрагменте кода, я создаю форму пост-типа и перенаправляю на контроллер загрузки и метод действия загрузки.
- Здесь также добавьте атрибут enctype, который описывает multipart/form-data, который требуется, когда мы передаем файл с другими данными. Если вы не передадите этот атрибут, ваши данные будут переданы контроллеру, но ваш файл не будет прикреплен к нему.
- Мы также добавляем кнопку типа отправки, которая отправляет нашу форму для данного действия.
- Кроме того, мы использовали нашу модель ответа для отображения сообщения об успехе и ошибке в компоненте предупреждения начальной загрузки, что соответственно является успехом или опасностью в соответствии со свойством IsSuccess.
Шаг 3.Создайте метод записи, который будет хранить файл на сервере.
Пояснение
- Как вы видите в приведенном выше коде, мы создаем метод публикации с именем Upload, который имеет параметр SingleFileModel.
- Затем мы проверяем, является ли ModelState допустимым или нет. Мы добавляем обязательный атрибут в модель, поэтому, если пользователь отправляет данные без данных, это условие будет ложным, и после возврата в представление индекса будет показано сообщение об ошибке, которое мы указали в атрибуте.
- Далее мы получаем путь к нашей папке, в которой мы собираемся хранить наши файлы. Если этой папки нет, то создаем.
- При загрузке одного файла мы сохраняем файл с именем использования, поэтому здесь мы получаем расширение файла, используя информацию о файле, и создаем новое имя файла.
- В последнем файле сохраните, используя метод копирования IFormFile, и передайте сообщение об успешном завершении в представление.
Вывод (показ проверки)
Вывод (сообщение об успешном завершении загрузки файла)
Вывод (файл в каталоге сервера)
Загрузить несколько файлов
Шаг 1.Добавьте новые методы в контроллер, как показано в приведенном ниже коде. Здесь мы передаем MultipleFilesModel в представление. И добавьте представление для этого.
Шаг 2. Добавьте дизайн, как показано ниже.
Пояснение
- Как показано выше, это представление почти такое же, как и представленное выше представление загрузки одного файла. Но здесь мы использовали только одну загрузку файла управления, а также добавили несколько атрибутов, которые позволяют нам выбирать несколько файлов.
- Также мы отправляем форму в другой метод, который имеет логику для загрузки нескольких файлов.
Шаг 3. Создайте метод действия post на стороне контроллера для хранения нескольких файлов одновременно.
Пояснение
- Как вы видели в приведенном выше коде, здесь мы создаем метод публикации с именем MultiUpload, который принимает MultipleFilesModel в качестве параметра.
- Прежде всего, здесь также мы проверяем, является ли ModelState допустимым или нет.
- Затем мы проверяем свойство файлов List‹IFormFile› на наличие одного или нескольких файлов.
- Затем переберите все файлы, используя цикл foreach. В этом цикле так же, как и в коде загрузки одного файла, мы сохраняем файл, но здесь мы используем имя самого файла в качестве имени файла вместо использования ввода.
- После этого верните сообщение об успехе в свойствах нашей модели ответа и вернитесь к представлению MultiFile, которое мы создали для загрузки нескольких файлов.
- В последнем я также добавляю меню для этих двух представлений в файл макета. Для легкой навигации между этими двумя представлениями. Вы можете сделать по вашему требованию.
Вывод (показ проверки)
Вывод (выберите файлы)
Вывод (файлы в каталоге сервера)
Заключение
Вот и все. Вот как мы загружаем и храним один или несколько файлов на сервере в ядре asp.net, используя IFormFile. Надеюсь, вы найдете это полезным и получите некоторую помощь. Спасибо.
Вы можете получить доступ к исходному коду из моего GitHub.