Как закачивать / скачивать файлы на / с вашего сервера? Давайте разберемся…

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. Проверьте, как это работает.

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