【问题标题】:Upload images to uploads folder _ JavaScript上传图片到上传文件夹_JavaScript
【发布时间】:2023-03-13 04:04:01
【问题描述】:

用户将能够发送文本帖子(输入类型 =“文本”)或图像帖子(输入类型 =“文件”)。但他们不会同时发送两者

这是我的表格(在 Jade 中):

form#addPost(action="/uploads", method="post", placeholder='Add your ideas here...')
            input#postinput(type="text", name="contents" placeholder="Add your ideas here...")
            div.privacy(class="onoffswitch", id='privacytog')
                input(type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="myonoffswitch" checked)
                label(class="onoffswitch-label" for="myonoffswitch")
                    span(class="onoffswitch-inner")
                    span(class="onoffswitch-switch")
            <div style="height:0px;overflow:hidden">
            <input type="file" id="fileInput"  name="fileInput" accept="image/*">
            </div>
            input#submit1(type="submit", value="Post")

这是我的 app.js(服务器端代码)

var util = require("util");
var fs = require("fs");
var bodyParser = require('body-parser');
var multer = require("multer");

app.use(multer({
    dest: "./public/uploads/"
}));

app.post("/uploads", function(req, res) {
    var data = req.body;
    var id = req.user._id;
    var username = req.user.username;
    var date = Date();
    var onOff = false;
    if (req.body.onoffswitch) {
      onOff = true;
    }


    //Images upload to uploads folder
    if (req.files) {

      console.log(util.inspect(req.files));
      if (req.files.fileInput.size === 0) {
                  return next(new Error("Hey, first would you select a file?"));
      }
      fs.exists(req.files.fileInput.path, function(exists) {
        if(exists) {
          res.end("Got your file!");
        } else {
          res.end("Well, there is no magic for those who don’t believe in it!");
        }
    });
  }



    User.findById(id, function(err, user) {
      if (err) return handleErr(err);

      var uid = shortid.generate();

      newPost = {
        //If sending down an Image use data.fileInput not contents
        contents: [data.contents || '/img/'+data.fileInput],
        _id: uid,
        privacy: onOff,
        username: req.user.username,
        date: date,
        rating: Number(0),
        uwv: []
      };

      user.posts.push(newPost);

      user.save(function(err, user){
        if(err) return handleErr(err);
        if(newPost.privacy === 'false'){
          for (var i = 0; i < user.followers.length; i++) {
            User.findOne({username:user.followers[i]}, function(err, follower){
              follower.discover.push(newPost)
              follower.save();
            });
          }
        }
      });
    });

}

图片正在上传并保存到上传文件夹。但是,当仅发布文本帖子(仅填写输入类型 =“文本”)时,它会不断抛出错误:无法读取未定义的属性“大小”

【问题讨论】:

    标签: javascript node.js forms file file-upload


    【解决方案1】:

    如果没有选择文件,通常浏览器不会发送文件字段,因此后端无法知道有这样一个字段。

    而只是检查文件字段是否存在:if (!req.files.fileInput)。您可能还想检查文件是否为空:if (!req.files.fileInput || !req.files.fileInput.size)

    【讨论】:

    • 谢谢。完美运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    相关资源
    最近更新 更多