我正在尝试将图像上传到Firebase云功能。我认为我已经阅读了有关此内容的全部文章,但找不到解决方案。
我已经使用了“ formidable.IncomingForm()”,“ multer”和“ busboy”,但是没有人在工作。
我知道我必须使用busboy。我想与该库共享我的最后代码。
app.post('/',function(req,res) {
var busboy = new Busboy({headers: req.headers});
var files = 0, finished = false;
busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
console.log('File [' + fieldname + ']: filename: ' + filename);
console.log("Uploading: " + filename);
++files;
// const temp = os.tmpdir();
// var path = temp.writeFileSync(file);
let path=os.tmpdir()+"/"+filename
let p=fs.writeFileSync(path,file)
console.log(path)
var fstream = fs.createWriteStream(path);
fstream.on('finish', function () {
if (--files === 0) {
// Upload a local file to a new file to be created in your bucket.
bucket.upload(path,function (err, file) {
if (!err) {
console.log("Uploaded: " + path);
res.json({
uploaded: true,
created_at: new Date().getTime(),
filename: filename,
mimeType: mimetype
});
}else{
console.error("err: " + err);
var error = new ErrorResponse(400);
error.errors+=err;
res.json(error);
}
});
}
});
file.pipe(fstream);
})
req.pipe(busboy);
})
此代码在我的本地服务器中成功上传文件,但在Firebase Cloud功能中没有成功上传文件。
我的要求是:
问题是函数“ busboy.on('file'...”永远不会执行
最佳答案
由于我是busboy
的菜鸟。我会坚持使用最受欢迎的图书馆multer
。
使用multer's
内存存储,将图像作为缓冲区上传。并使用该缓冲区将图像上传到存储桶。
请尝试以下代码段:
var multer = require('multer')
// using the in-memory storage
var upload = multer()
// use the same paramter you are using for uploading from postman
app.post('/', upload.single('file'), function(req, res) {
const fileBuff = req.file.buffer
const fileName = req.file.filename
const mimeType = req.file.mimetype
const file = myBucket.file(fileName);
file.save(fileBuff)
.then(success => {
res.json({
uploaded: true,
created_at: new Date().getTime(),
filename: fileName,
mimeType: mimeType
});
})
.catch(err => {
console.error("err: " + err);
var error = new ErrorResponse(400);
error.errors += err;
res.json(error);
})
})