簡體   English   中英

如何使用multer上傳文件/在表格數據中過帳?

[英]How to use multer to upload file/to do Post in form-data?

這是productsModel.js文件

'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var productsSchema = new Schema({
      name: {
        type: String,
        required: true
      },
      cost: {
          type: Number
      },
      product_imagePaths: [{
          type: String
      }]
    });

module.exports = mongoose.model('Products', productsSchema);

這是我的productsController.js的代碼

var mongoose = require('mongoose'),
Products = mongoose.model('Products');


exports.uploadProducts = function(req,res) {
    var new_product = new Products(req.body)
    new_product.save(function(err,product){
        if(err) {
            res.send(err);
         }
         res.status = 200;
         res.json({
            "status":"success"
         });
     }); 
};

productsRou​​tes.js

'use strict';
module.exports = function (app) {
  var productsController = require('../controllers/productsController');

  app.route('/products')
    .get(productsController.fetchAllProducts)
    .post(productsController.uploadProducts);
};

在我的server.js中

// mongoose instance connection url connection
mongoose.Promise = global.Promise;
var db = mongoose.connect('mongodb://localhost/abcd', {
    useMongoClient: true
}); 


 // body parser middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true }));

// route
var userRoutes = require('./api/routes/userRoutes');
var aboutUsRoutes = require('./api/routes/aboutusRoutes');
var productsRoutes = require('./api/routes/productsRoutes');
userRoutes(app);
aboutUsRoutes(app);
productsRoutes(app);

現在這在我使用x-www-form-urlencoded 但是由於我想通過Post方法(productsController.js中的uploadProducts)上傳文件,因此只能通過form-data 但是,它不適用於form-data 我讀到multer可用於上載form-data ,但對於如何在以下方法中使用它一無所知。

您希望在調用uploadProducts函數之前將multer用作中間件。

這是productRoutes.js的示例設置

'use strict';
 const multer = require('multer')
 const storage = multer.memoryStorage()
 const upload = multer({
      storage: storage,
      limits: {
        fileSize: 5000000,
        files: 1
      }
    })
module.exports = function (app) {
  var productsController = require('../controllers/productsController');

  app.route('/products')
    .get(productsController.fetchAllProducts)
    .post(upload.single('img'), productsController.uploadProducts);
};

這將創建圖像的Buffer ,您可以使用req.file.bufferproductsController.js進行req.file.buffer

需要注意的是upload.single是一個內置的功能multer 在此處閱讀有關其他功能的更多信息。 同樣, img需要匹配您輸入字段的名稱,即<input type="file" name="img">

這只是多種方法之一。 希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM