我看到了什么:
>
Integrate with Google Cloud Platform
> Upload files to Firebase Storage using Node.js
感想:
我目前在本地存储图像并将图像路径存储在Firebase实时数据库中.我想将图像存储在GCloud中(以降低成本).
题:
当前代码:
var express = require("express"); var router = express.Router(); var flash = require("connect-flash"); var firebase = require("firebase"); var multer = require("multer"); var upload = multer({dest:"./public/images/uploads/",limits: {fileSize: 250000}}).single("image"); router.get("/",function(req,res,next){ if (firebase.auth().currentUser == null) { global.page_name = "login"; res.render("users/login"); } else { global.page_name = "upload"; res.render("upload"); } }); router.post("/",next){ upload(req,function (err) { if (err) { req.flash("error_msg","File too large. Max Size: 250KB"); res.redirect("/upload"); return } var title = req.body.title; var section = req.body.section; // Validation req.checkBody('title','Title is required').notEmpty(); req.checkBody('title','Title is too long,max: 50 charachters !').len(0,50); req.checkBody('section','Section is required').notEmpty(); var errors = req.validationErrors(); if(errors){ res.render('upload',{ errors: errors }); } else { if (req.file){ console.log("Uploading file..."); var image = req.file.filename; var section = req.body.section.toLowerCase(); var IDref = firebase.database().ref("posts/"+section+"/lastID"); IDref.once("value",function(IDsnapshot){ var number = IDsnapshot.val(); var postRef = firebase.database().ref("posts/"+section).push(); var UID = postRef.key; var post = { title: req.body.title,section: req.body.section,image: image,author: firebase.auth().currentUser.uid,section: section,upvotes: 0,downvotes: 0,id: number + 1,key: UID } IDref.set(post.id); postRef.set(post); var authoredPost = { title: req.body.title,section: section,} var userRef = firebase.database().ref("users/"+firebase.auth().currentUser.uid.toString()+"/posts/"+UID.toString()); userRef.set(authoredPost); }); req.flash("success_msg","Post Created"); res.redirect("/upload"); } else { console.log("No file uploaded"); req.flash("error_msg","Image is required"); res.redirect("/upload"); } } }); }); module.exports = router;
解决方法
我认为最好在web或app中使用firebase.storage直接上传到GCloud,但你可以使用这段代码来解决你的问题
var express = require("express"); var router = express.Router(); var flash = require("connect-flash"); var fs = require('fs'); var firebase = require("firebase"); var gcloud = require('google-cloud'); var multer = require("multer"); var upload = multer({dest:"./public/images/uploads/",limits: {fileSize: 250000}}).single("image"); // Enable Storage var gcs = gcloud.storage({ projectId: 'grape-spaceship-123',keyFilename: '/path/to/keyfile.json' }); // Reference an existing bucket. var bucket = gcs.bucket('my-existing-bucket'); router.get("/",next){ if (firebase.auth().currentUser == null) { global.page_name = "login"; res.render("users/login"); } else { global.page_name = "upload"; res.render("upload"); } }); router.post("/","File too large. Max Size: 250KB"); res.redirect("/upload"); return } var title = req.body.title; var section = req.body.section; // Validation req.checkBody('title',{ errors: errors }); } else { if (req.file){ console.log("image saved successfully in local"); //upload to the GCloud bucket.upload(req.file.filename,function(err,file) { if (!err) { console.log("image saved successfully in GCloud"); //remove local image fs.unlink(req.file.filename,(err) => { if (err) throw err; console.log('successfully deleted /tmp/hello'); }); //store image name in firebase var image = file.name;//may be another key hold the image name. var section = req.body.section.toLowerCase(); var IDref = firebase.database().ref("posts/"+section+"/lastID"); IDref.once("value",function(IDsnapshot){ var number = IDsnapshot.val(); var postRef = firebase.database().ref("posts/"+section).push(); var UID = postRef.key; var post = { title: req.body.title,key: UID } IDref.set(post.id); postRef.set(post); var authoredPost = { title: req.body.title,} var userRef = firebase.database().ref("users/"+firebase.auth().currentUser.uid.toString()+"/posts/"+UID.toString()); userRef.set(authoredPost); }); req.flash("success_msg","Post Created"); res.redirect("/upload"); } }); } else { console.log("No file uploaded"); req.flash("error_msg","Image is required"); res.redirect("/upload"); } } }); }); module.exports = router;