В настоящее время я создаю систему загрузки файлов в своем приложении. Мой бэкенд — Sails.js (10.4), который служит API для моего отдельного интерфейса (Angular).
Я решил хранить файлы, которые я загружаю в свой экземпляр MongoDB, и использовать сборку парусов в модуле загрузки файлов Skipper. Я использую адаптер skipper-gridfs (https://github.com/willhuang85/skipper-gridfs) для загрузки файлов в mongo.
Теперь загрузить сами файлы не проблема: я использую dropzone.js на своем клиенте, который отправляет загруженные файлы в /api/v1/files/upload. Файлы будут загружены.
Для этого я использую следующий код в моем FileController:
module.exports = {
upload: function(req, res) {
req.file('uploadfile').upload({
// ...any other options here...
adapter: require('skipper-gridfs'),
uri: 'mongodb://localhost:27017/db_name.files'
}, function(err, files) {
if (err) {
return res.serverError(err);
}
console.log('', files);
return res.json({
message: files.length + ' file(s) uploaded successfully!',
files: files
});
});
}
};
Теперь проблема: я хочу что-то делать с файлами до того, как они будут загружены. Конкретно две вещи:
- Проверьте, разрешен ли файл: соответствует ли заголовок типа содержимого типам файлов, которые я хочу разрешить? (jpeg, png, pdf и т. д. - только основные файлы).
- Если файл является изображением, измените его размер до нескольких предопределенных размеров, используя imagemagick (или что-то подобное).
- Добавьте информацию о файле, которая также будет сохранена в базе данных: ссылка на пользователя, загрузившего файл, и ссылка на модель (например, статью/комментарий), частью которой является файл.
Я понятия не имею, с чего начать или как реализовать такую функциональность. Так что любая помощь будет принята с благодарностью!