В этой статье я хочу показать способ загрузки файлов с помощью службы перьев, и, к концу, мы все еще сможем использовать ее как обычную службу перьев.

  • Я буду использовать MySQL и Sequelize (но это ни на что не повлияет).

Я начинаю с самого начала, создавая новое приложение для перьев с помощью интерфейса командной строки.

Затем я сгенерирую аутентификацию с помощью интерфейса командной строки, который создаст пользовательский сервис, а также сгенерирую обработчик и промежуточное ПО для аутентификации.

Теперь мы можем начать со службы загрузки:

  • Создавая это.
  • Модификация модели.
  • Установите multer и измените службу, чтобы она обрабатывала загрузку файлов и при этом работала нормально.

Создание сервиса загрузки:

Модификация модели:

Установите Multer и модифицируйте сервис:

  • Вы можете установить Multer, набрав npm i multer в корень вашего проекта.
  • Я буду хранить загруженные файлы в папке uploads внутри папки public.

Служба после внесения изменений с комментариями, которые помогут вам разобраться в изменениях.

Использование :

  • Сначала я создам пользователя (потому что мы добавили промежуточное ПО для аутентификации):
curl 'http://localhost:3030/users/' -H 'Content-Type: application/json' --data-binary '{ "email": "[email protected]", "password": "secret" }'
  • для аутентификации пользователя:
curl 'http://localhost:3030/authentication/' -H 'Content-Type: application/json' --data-binary '{ "strategy": "local", "email": "[email protected]", "password": "secret" }'

это даст нам accessToken пользователя, который мы будем использовать с файлами для авторизации пользователя

  • Загрузка файлов (с помощью почтальона):

  • Без токена jwt файлы не будут храниться!

  • с jwt ответ выглядит так:

  • Обратите внимание, что служба по-прежнему ведет себя нормально, если мы попытаемся просмотреть данные через HTTP-запрос GET, мы сможем:

пытаюсь изменить изображение с идентификатором 1:

мы можем обновлять, патчить, удалять, получать, публиковать с помощью этого сервиса. Однако загруженные вами файлы по-прежнему необходимо удалить через некоторое время, вы можете сделать это с помощью дополнительных ловушек или cron jobs.

Если вы хотите отфильтровать файл по расширению, вы можете зарегистрировать fileFilter с помощью multer, я настоятельно рекомендую вам прочитать документацию Multer.

Примечания :

  • Единственная необходимая строка - это req.feathers.files = req.files. В промежуточном программном обеспечении, которое мы добавили перед созданием uploads service, который преобразует файлы в перья, а код, преобразующий данные в формат модели, должен быть before create hook и before patch hook.

Другой подход: промежуточное ПО Express.

Мы можем создать обычное промежуточное программное обеспечение Express, которое обрабатывает только файлы и возвращает их идентификатор после вставки пути к каждому файлу в таблицу.

давайте начнем с создания службы под названием media.

  • медиа-модель (просто сохраняя путь, и Sequelize добавит id, createdAt, updatedAt).

теперь нам нужно сгенерировать промежуточное ПО и обработать файлы:

перейдите к src/middleware/index.js и добавьте следующий код:

и в my-uploadmiddleware добавьте следующий код

Чтобы протестировать промежуточное ПО:

Ответ :

Теперь вы можете использовать возвращенный идентификатор, чтобы связать носитель с любой другой таблицей, это будет действительно полезно, если вы не хотите отправлять большой запрос, но вы отправите файлы, когда пользователь их добавит, и отправите только их идентификатор с основная просьба.

КОНЕЦ

Надеюсь, это было вам полезно 🙂.

Полезные ссылки

1 - О multi: true здесь.

2 - Документы для загрузки файла Feathers сюда.

3 - видео, которое может пригодиться