Я пытаюсь использовать multer для хранения Firebase. Я настроил механизм хранения, следуя этому руководству: do c. Исходя из этого, я написал следующее class
определение:
const { image_types } = require('./enums');
module.exports.FirebaseStorage = class {
constructor(opts) {
const { destination, typeHandler, getName, bucket } = opts;
if(!getName || !bucket) {
throw new Error('Bucket and/or getName callbacks are undefined');
}
this.typeHandler = typeHandler ? typeHandler : (req, file) => {
switch(file.mimetype) {
case image_types.IMG_JPEG:
case image_types.IMG_PNG:
return true;
default:
throw new Error('Mismatched image mime type');
}
};
this.bucket = bucket;
this.getName = getName;
if(!destination) {
// define
this.getDestination = (req, file, cb) => {
const n = this.getName(file);
const _f = this.bucket.file(n);
cb(null, _f);
}
}
else {
this.getDestination = destination;
}
}
_handleFile(req, file, cb) {
/*
* This method is exposed to multer to save the file
*
*/
try {
console.log(`Uploading File`);
const typeChecked = this.typeHandler(req, file);
if(typeChecked) {
this.getDestination(req, file, (err, f) => {
if(err) {
return cb(err, null);
}
const wrtStream = f.createWriteStream();
file.stream.pipe(wrtStream);
wrtStream
.on('error', (err) => cb(err, null))
.on('finish', () => {
console.log(`File Uploaded`);
cb(null, true);
});
});
}
} catch(e) {
throw e;
}
}
_removeFile(req, file, cb) {
/*
* Removes a file that exists
*/
}
}
. В коде getName
возвращает случайное ха sh на основе имени файла и других мета-свойств, f
является Firebase File
экземпляр. Моя проблема в том, что при загрузке файла метод _handleFile
не вызывается. Вот как я настраиваю multer с помощью этого пользовательского механизма хранения:
const imageStore = multer({
storage: new FirebaseStorage({
bucket,
getName: generateFileName,
})
});
Маршрут настроен так:
serv.post('/upImg', imageStore.single('avatar'), async (req, res, nxt) => {
console.log(req.body);
res.json({
status: 200,
message: 'Uploaded'
});
})
Когда я отправляю запрос с использованием CURL, я получаю 200 Uploaded
но ни файл не загружен, ни console.log
внутри _handleFile
не вызываются. Это означает, что multer
даже не вызывает _handleFile
. Вот запрос, который я пытаюсь выполнить:
curl -X POST -H 'Content-Type:multipart/form-data' -F 'avatar=@path/to/image.png' http://localhost:5001/project/region/service/upImg
Я уверен, что мне не хватает определенного шага настройки ключа. Я искал несколько часов безуспешно, поэтому любые советы или предложения будут высоко оценены. Спасибо.
Примечание Не дошло до того, что может быть выполнен код загрузки Firebase, поэтому не уверен, есть ли какие-либо ошибки времени выполнения.