В этой статье я хочу показать способ загрузки файлов с помощью службы перьев, и, к концу, мы все еще сможем использовать ее как обычную службу перьев.
- Я буду использовать 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-upload
middleware добавьте следующий код
Чтобы протестировать промежуточное ПО:
Ответ :
Теперь вы можете использовать возвращенный идентификатор, чтобы связать носитель с любой другой таблицей, это будет действительно полезно, если вы не хотите отправлять большой запрос, но вы отправите файлы, когда пользователь их добавит, и отправите только их идентификатор с основная просьба.
КОНЕЦ
Надеюсь, это было вам полезно 🙂.
Полезные ссылки
1 - О multi: true
здесь.
2 - Документы для загрузки файла Feathers сюда.
3 - видео, которое может пригодиться