使用云功能存储文件到Firebase存储使用云功能REST API请求
问题描述:
如何通过POST(表单数据)HTTP REST请求存储文件Firebase Cloud Functions因此我可以在REST请求之后在云中处理,然后存储在一个连接到我的项目的桶。使用云功能存储文件到Firebase存储使用云功能REST API请求
例如很容易访问,但存储是没有的,我试图在即时通讯无法将其保存在Firebase Storage使用multiparty和busboy林达的NodeJS,但问题依然。从火力功能访问fireabse /谷歌云存储
var busboy = new Busboy({
headers: req.headers
});
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
file.on('data', function(data) {
// const object = data;
// const fileBucket = object.bucket;
// const bucket = gcs.bucket(filename);
// const tempFilePath = path.join(os.tmpdir(), filename);
console.log(data);
});
file.on('end', function() {
console.log('File [' + fieldname + '] Finished');
});
});
busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) {
console.log('Field [' + fieldname + ']: value: ' + inspect(val));
});
busboy.on('finish', function() {
console.log('Done parsing form!');
res.writeHead(200, {
Connection: 'close'
});
res.end();
});
req.pipe(busboy);
答
最后我完成这样的解决方案,并能正常工作
router.post('/upload', 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;
var path = temp.writeFileSync(file);
var fstream = fs.createWriteStream(path);
fstream.on('finish', function() {
if (--files === 0) {
var bucket = firebase.bucket();
// 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,
path: path,
mimeType: mimetype
});
}else{
console.error("err: " + err);
var error = new ErrorResponse(400);
error.errors+=err;
res.json(error);
}
});
}
});
file.pipe(fstream);
});
答
最简单的方式是使用节点JS谷歌云包的服务,在这种情况下@google-cloud/storage。
一旦你的函数的依赖它的一部分,你只是你的函数的js文件中启动它:
const gcs = require('@google-cloud/storage')();
因为功能在谷歌的云环境中运行也没有必要提供认证信息(除非存储和功能不属于相同的Google Cloud/Firebase项目)。
我有运行问题火力存储Im做使用HTTP POST多的要求,但我不能在功能它临时存储在那里我使用NodeJS处理发布请求,然后将其保存在谷歌存储中。 – Ivor