2016-12-19 24 views
7

Ben baktığı:Node.js'de GCloud'a dosya nasıl yüklenir?


DÜŞÜNCELER:

Şu anda görüntüleri yerel olarak saklıyorum ve görüntü yollarını Firebase gerçek zamanlı veritabanında saklıyorum. Görüntüleri GCloud'da saklamak istiyorum (maliyetleri düşürmek için).


SORU:

NASIL MEVCUT KODU GCLOUD yüklemek için DEĞİŞTİRİN GEREKİR?


AKIM KODU:

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("/", function(req, res, next){ 
    upload(req,res, 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; 
+0

Bu gerçekten harika bir soru. Gördüğünüz kaynakları listelediğiniz için teşekkür ederiz. Bunu takip etmeye çalıştın mı? Varsa, hangi konuların var? https://cloud.google.com/nodejs/getting-started/using-cloud-storage –

cevap

4

i onun daha iyi GCloud doğrudan upload web veya app firebase.storage kullanmayı düşünüyorum ancak sorunu çözmek için bu kodu kullanabilirsiniz

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("/", 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("/", function(req, res, next){ 
    upload(req,res, 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("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, 
           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; 
+0

Firebase.storage'i kullanamıyorum çünkü SDK Node.js ile çalışmıyor ve Firebase'in Düğüme eklemek için bir planı yok. .js :((Kodunuzu önümüzdeki 24 saat içinde deneyeceğim) – Coder1000

+0

Referans için: http://stackoverflow.com/questions/39848132/upload-files-to-firebase-storage-using-node-js – Coder1000

+0

kullanıyor musunuz? Bu kod ve başka bir düğüm js programı veya web uygulaması veya android uygulaması veya ios uygulaması gibi bir istemci tarafından yönlendirme? – fingerpich

İlgili konular