javascript - 将图像上传到未定义的 Node.js image'

标签 javascript node.js express file-upload

抱歉缩进不佳 我是node.js新手,尝试将图像上传到node.js 检查了很多答案,如果我错了请纠正我

1.bodyParser需要一个中间件来处理二进制文件,例如IMAGE 如果我不使用它,它会显示

undefine token

2.使用Multer作为中间件,像这样

var multer = require('multer') 

var upload = multer({ dest:'/Node/file-upload/uploads/' });

app.post('/upload',upload.array(),songs.upload);
  • 关注this ,req.files是图像文件,req.body是文件名 所以我使用 fs.readFile 来读取文件
  • fs.readFile(req.files.image.path, function (err, data)
    

    4.比我需要文件路径和文件名,我使用req.body

    var dirname = "/Node/file-upload/uploads/";
    
    var newPath = dirname + req.body.image.filename;
    

    5.然后将数据写入目的地

    fs.writeFile(newPath, data, function (err)
    

    我不确定我错过了哪一部分,我花了 10 个小时才完成此操作,请帮忙

    它总是告诉我类型错误:无法读取未定义的属性“图像”

    app.js

    var    express = require('express')
          ,bodyParser = require('body-parser')
          ,app = express()
          ,multer  =  require('multer')
          ,binary = require('binary')
          ,fs = require('fs')
          ,util= require('util')
          ,http = require('http')
          ,multer = require('multer')
          ,upload = multer({ dest: '/Node/file-upload/uploads/' });
    
     app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies.
     app.use(bodyParser.json({limit: '5mb'}));
    
    
    songs = require('./routes/route');
    
    app.listen(3000, function () {
          console.log('Example app listening on port 3000!');
                              });
    app.post('/upload',upload.array(),songs.upload);
    

    路由.js

    var mongoose = require('mongoose');
    var uri = "mongodb://xxxxxx:xxxxxxx@ds061365.mongolab.com:61365/aweitest";
    mongoose.connect(uri);
    // we're connected!
    var db = mongoose.connection.db;
    var BSON = require('bson').BSONPure;
    var binary = require('binary');
    var body = require('body-parser');
    var fs = require('fs');
    
    db.on('error', console.error.bind(console, 'connection errrrrrrrror:'));
    
    db.once('open', function() {
         console.log("mongodb is connected!!");
     });
    
    exports.upload = function(req, res) {
        console.log(req.body);
           fs.readFile(req.files.image.path, function (err, data){
                var dirname = "/Node/file-upload/uploads/";
                var newPath = dirname + req.body.image.filename;
           fs.writeFile(newPath, data, function (err) {
                if(err){
                    res.json({'response':"Error"});
                }else {
                    res.json({'response':"Saved"});
              }
           });
        });
      };
    

    错误

    TypeError: Cannot read property 'image' of undefined
    at exports.upload (c:\Users\awei\WebstormProjects\untitled\routes\girlshanlder.js:92:26)
    at Layer.handle [as handle_request] (c:\Users\awei\node_modules\express\lib\router\layer.js:95:5)
    at next (c:\Users\awei\node_modules\express\lib\router\route.js:131:13)
    at multerMiddleware (c:\node_modules\multer\lib\make-middleware.js:18:41)
    at Layer.handle [as handle_request] (c:\Users\awei\node_modules\express\lib\router\layer.js:95:5)
    at next (c:\Users\awei\node_modules\express\lib\router\route.js:131:13)
    at Route.dispatch (c:\Users\awei\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (c:\Users\awei\node_modules\express\lib\router\layer.js:95:5)
    at c:\Users\awei\node_modules\express\lib\router\index.js:277:22
    at Function.process_params (c:\Users\awei\node_modules\express\lib\router\index.js:330:12)
    at next (c:\Users\awei\node_modules\express\lib\router\index.js:271:10)
    at jsonParser (c:\Users\awei\node_modules\body-parser\lib\types\json.js:107:37)
    at Layer.handle [as handle_request] (c:\Users\awei\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (c:\Users\awei\node_modules\express\lib\router\index.js:312:13)
    at c:\Users\awei\node_modules\express\lib\router\index.js:280:7
    at Function.process_params (c:\Users\awei\node_modules\express\lib\router\index.js:330:12)
    

    最佳答案

    app.js 中的 upload.array() 应该是

    upload.array('image',1) // 1 here is number of files you would upload
    

    在您的 songs.upload 中间件中,您将获得 req.files.image 作为数组,

    因此,您最好检查数组的长度并迭代它以保存每个文件,或者如果您只想保存 1 个文件,您可以执行以下操作。

    示例:

    app.js

    app.post('/upload',upload.array('image',1),songs.upload);
    

    路由.js

    var mongoose = require('mongoose');
    var uri = "mongodb://xxxxxx:xxxxxxx@ds061365.mongolab.com:61365/aweitest";
    mongoose.connect(uri);
    // we're connected!
    var db = mongoose.connection.db;
    var BSON = require('bson').BSONPure;
    var binary = require('binary');
    var body = require('body-parser');
    var fs = require('fs');
    
    db.on('error', console.error.bind(console, 'connection errrrrrrrror:'));
    
    db.once('open', function() {
         console.log("mongodb is connected!!");
     });
    
    exports.upload = function(req, res) {
        console.log(req.body);
           fs.readFile(req.files.image[0].path, function (err, data){
                var dirname = "/Node/file-upload/uploads/";
                var newPath = dirname + req.body.image.filename;
           fs.writeFile(newPath, data, function (err) {
                if(err){
                    res.json({'response':"Error"});
                }else {
                    res.json({'response':"Saved"});
              }
           });
        });
      };
    

    关于javascript - 将图像上传到未定义的 Node.js image',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35628540/

    相关文章:

    javascript - symfony2 从 Controller 访问 $_SESSION

    JavaScript 作为加载 Rails 表单的条件?

    javascript - 用数字对数组进行排序

    javascript - 如何在 Nodejs 和 Express 中更好地组织我的路线?

    javascript - 上传前如何操作内存中的文件流

    javascript - 使用 CSS 的 Pinterest 样式布局,但水平堆叠而不是垂直堆叠

    node.js - 更改 Mongoose 流上的查询

    javascript - 未处理的 promise 拒绝警告 : TypeError: Cannot read property 'title' of undefined

    node.js - 中间件不重定向

    angularjs - CORS AngularJS 不通过 POST 或 DELETE 发送 Cookie/凭证,但一切正常