如何将文件上传到Node.js中的GCloud?
我看到了什么:
与Google云端平台整合
使用Node.js将文件上传到Firebase存储
感想:
我目前在本地存储图像并将图像路径存储在Firebase实时数据库中。 我想将图像存储在GCloud中(以降低成本)。
题:
我应该如何修改我的当前代码以上传至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("/", 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;
我认为最好在web或应用程序中使用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("/", 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;
链接地址: http://www.djcxy.com/p/94487.html