Как закачивать / скачивать файлы на / с вашего сервера? Давайте разберемся…
1. Установить
Для работы с хранилищем данных потребуется установить дополнительный @adonisjs/drive
пакет. Для этого - запустите эту команду CLI внутри своего проекта.
adonis install @adonisjs/drive
2. Изменения после запуска скрипта
После запуска скрипта вы увидите два основных изменения в своем проекте:
1. В package.json
файл будет добавлен пакет @adonisjs/drive
:
"@adonisjs/drive": "^1.0.4",
2. Новый созданный drive.js
файл в папке /config
…/[ROOT
]/config/drive.js
3. Регистрация
После выполнения команды CLI вам необходимо зарегистрировать провайдера внутри файла /start/app.js
:
const providers = [
'@adonisjs/drive/providers/DriveProvider'
]
4. Создание нового маршрута с помощью контроллера.
Для загрузки и загрузки файлов нам потребуются Маршруты и FileController.
Сначала начнем с upload
функциональности:
4.1. Создание нового маршрута
const Route = use('Route'); Route.group( () => { Route.post('upload', 'FileController.upload'); } ).prefix('api/v1/');
Здесь мы в основном говорим:
«Приложение, используйте метод загрузки в FileController для обработки запросов POST пользователя к конечной точке« / api / v1 / upload ».
4.2. Создание нового файлового контроллера
adonis make:controller File --type http
После выполнения этой команды вы найдете app/Controllers/Http/FileController.js
файл, созданный в вашем проекте:
Давайте заполним этот новый пустой файл FileController.js некоторым кодом:
5. Загрузка файла на сервер.
Для тестирования загрузки файлов мы будем использовать Insomnia (при желании вы можете использовать Postman):
- Во-первых, для загрузки файла на сервер нам нужно выбрать «Multipart Form».
- Затем мы должны указать
param
имя, которое должно быть таким же, как вfile method
:
- Выберите файл, который хотите скачать:
Я выбрал adonis-js.jpeg
файл, и что произойдет после нажатия кнопки Отправить. Давайте посмотрим:
Результат в нашем приложении:
Если установлен флаг overwrite:true
, ваш файл будет перезаписываться каждый раз, когда вы нажимаете Отправить. Если вы измените его на false
:
6. Валидации
Как вы видели в предыдущих примерах кода, у нас был объект validationOptions
, указанный в методе file(, …)
:
const validationOptions = { types: ['image'], size: '1mb', };
Что будет, если мы изменим свойство size
на 1kb
. Давайте разберемся:
А что будет, если мы изменим types
на video
:
Вы также можете указать свои данные:
const validationOptions = { types: ['image'], size: '1mb', extnames: ['png'], };
7. Создание отдельного валидатора
Приятно, что мы можем указать ограничение в нашем Контроллере, но мы создаем отдельный файл для обработки валидации:
7.1 Создание нового валидатора
Используйте эту команду CLI для создания нового валидатора:
adonis make:validator FileUpload
После выполнения этой команды вы увидите новый созданный Validators/FileUpload.js
файл.
Нам нужно будет внести несколько изменений в Validators/FileUpload.js
файл:
7.2 Удалите старую реализацию из файлового контроллера
После этого вы легко сможете удалить validationOptions
из FileController.js
file:
const imageFile = request.file('custom-param-name');
Результат будет точно таким же!
8. Скачать файл с сервера
Во-первых, нам нужно добавить новую GET
конечную точку для загрузки нашего файла:
Затем нам нужно обновить наш файл FileController.js, добавив download
метод:
Посмотрим на результаты:
Файл не существует
Файл успешно загружен
В браузере:
9. Загрузка / скачивание видеофайла.
Для видео файлов мы можем использовать точно такой же подход:
- создавать новые методы в FileController для видеофайлов
- добавить новые маршруты
Route .post('uploadVideo', 'FileController.uploadVideo'); Route .get('downloadVideo/:fileName', 'FileController.download');
И все, готово.
Давайте посмотрим, как это будет работать с загрузкой / скачиванием видео после развертывания проекта на сервере Heroku. В демонстрационных целях мы будем использовать видео с сайта ЗДЕСЬ.
1. Загрузите видеофайл в развернутое приложение Heroku:
2. Проверьте, как это работает.
Если вам понравился этот рассказ, вы можете также проверить Список всех моих рассказов. Удачного кодирования 🎉