繁体   English   中英

使用Cloud Functions REST API请求将文件存储在Firebase存储中

[英]Store file in Firebase Storage using Cloud Functions REST API request

如何通过Firebase Cloud Functions中的POST(表单数据)HTTP REST请求存储文件,以便我可以在REST请求之后在云中进行处理,然后存储在链接到我的项目的存储桶中。

例如,它非常易于访问,但存储却不是,我尝试使用多方busboy NodeJS库,但问题仍然在于Im无法将其保存在Firebase Storage中

    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);
    });

从Firebase函数访问fireabse / google云存储的最简单方法是使用node js google cloud软件包作为服务,在本例中为@ google-cloud / storage

一旦它成为函数依赖项的一部分,您只需在函数js文件中启动它即可:

const gcs = require('@google-cloud/storage')();

由于该功能在Google云端环境中运行,因此无需提供身份验证信息(除非存储和功能不属于同一Google Cloud / Firebase项目)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM