当前位置: 首页 > 知识库问答 >
问题:

如何在node.js中将文件上传到GCloud?

刘丰羽
2023-03-14

我看的是:

>

  • 与谷歌云平台集成

    当前代码:

    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;
    
  • 共有1个答案

    锺离穆冉
    2023-03-14

    我认为最好使用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;
    
     类似资料:
    • 问题内容: 当我查询此问题时,发现了很多帖子,但是它们都涉及如何从浏览器将文件上传到node.js服务器。我想将文件从node.js代码上传到另一台服务器。我试图基于对node.js的有限了解来编写它,但是它不起作用。 上面的函数被其他生成数据的代码调用。 我尝试使用curl -F“ file = @ ”上传相同的数据文件,并且上传成功。但是我的代码失败了。服务器返回一个特定于应用程序的错误,提示

    • 问题内容: 我试图了解如何使用Node.js在Firebase Storage中上传文件。我的第一次尝试是使用Firebase库: 但是事实证明,Firebase无法从服务器端上传文件,正如在文档中明确指出的那样: Firebase存储不包含在服务器端Firebase npm模块中。相反,您可以使用gcloud Node.js客户端。 在代码中,您可以使用以下方式访问存储分区: 我们可以在没有Go

    • 问题内容: 如何从Python 3将文件上传到Google Cloud Storage ?最终是Python 2,如果它在Python 3中不可行。 我已经看过了,但是还没有找到实际可行的解决方案。我尝试了boto,但是当我尝试通过生成生成必需的.boto文件时,总是说我需要通过配置身份验证。但是,我在没有帮助的情况下做了很多次。 问题答案: 使用标准的gcloud库,该库同时支持Python 2

    • 问题内容: 有很多关于使用go 发布文件的教程,但是几乎总是以这样的方式开始: 也就是说,您将整个文件读入内存,然后将其转换为并将其传递给请求,如下所示: 如果您想发布海量文件并避免将其读取到内存中,而是将文件分块蒸出……您将如何做? 问题答案: 如果需要设置,可以手动完成。以下代码段是将文件和其他参数作为流上传的示例(基于Golang中无缓冲区Multipart POST的代码 )

    • 问题内容: 作为Django的新手,我很难在Django 1.3中制作上传应用程序。我找不到任何最新的示例/代码段。有人可以发布最少但完整的(模型,视图,模板)示例代码来这样做吗? 问题答案: ew,Django文档确实没有很好的例子。我花了2个多小时来挖掘所有内容,以了解其工作原理。有了这些知识,我实现了一个项目,该项目可以上传文件并将其显示为列表。要下载该项目的源代码,请访问https://g

    • 问题内容: 我正在使用Flash录制音频并将其上传到节点服务器。Flash客户端是jrecorder的变体。当用户完成录制后,将使用POST请求(而不是表单,因为Flash无法创建文件)来上传音频,并将音频ByteArray作为POST请求的数据(请参见此处的更多信息)。 我可以使用下面的代码在Node- land上正确接收文件,但是发出的音频被破坏了,您听不到任何声音。话虽如此,该文件的内容可以