2017-08-06 54 views
0

如何通过POST(表单数据)HTTP REST请求存储文件Firebase Cloud Functions因此我可以在REST请求之后在云中处理,然后存储在一个连接到我的项目的桶。使用云功能存储文件到Firebase存储使用云功能REST API请求

例如很容易访问,但存储是没有的,我试图在即时通讯无法将其保存在Firebase Storage使用multipartybusboy林达的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); 

回答

0

最后我完成这样的解决方案,并能正常工作

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

最简单的方式是使用节点JS谷歌云包的服务,在这种情况下@google-cloud/storage

一旦你的函数的依赖它的一部分,你只是你的函数的js文件中启动它:

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

因为功能在谷歌的云环境中运行也没有必要提供认证信息(除非存储和功能不属于相同的Google Cloud/Firebase项目)。

+0

我有运行问题火力存储Im做使用HTTP POST多的要求,但我不能在功能它临时存储在那里我使用NodeJS处理发布请求,然后将其保存在谷歌存储中。 – Ivor

相关问题