
Как закачивать / скачивать файлы на / с вашего сервера? Давайте разберемся…
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. Проверьте, как это работает.

Если вам понравился этот рассказ, вы можете также проверить Список всех моих рассказов. Удачного кодирования 🎉