【问题标题】:Store file in Firebase Storage using Cloud Functions REST API request使用 Cloud Functions REST API 请求将文件存储在 Firebase 存储中
【发布时间】:2018-01-14 00:23:04
【问题描述】:

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

例如很容易访问但存储不是,我尝试使用 multipartybusboy NodeJS 库,但问题仍然存在我无法将其保存在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);

【问题讨论】:

    标签: node.js rest firebase firebase-storage


    【解决方案1】:

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

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

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

    因为函数在谷歌云环境中运行,所以不需要提供身份验证信息(除非存储和函数不是同一个谷歌云/Firebase 项目的一部分)。

    【讨论】:

    • 我有 firebase 存储运行问题是我使用 HTTP Post 多部分执行请求,但我无法将它临时存储在我使用 NodeJS 处理发布请求的函数中,然后保存它在谷歌存储中。
    【解决方案2】:

    最后我完成了这个解决方案并且工作正常

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

    【讨论】:

      猜你喜欢
      • 2019-03-23
      • 2021-11-04
      • 2021-06-16
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 2020-01-25
      相关资源
      最近更新 更多