2017-08-06 55 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

相關問題