![](/img/trans.png)
[英]How do I upload a file using Fetch and Multer and post form data in the same request?
[英]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"
});
});
};
productsRoutes.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.buffer
在productsController.js
進行req.file.buffer
。
需要注意的是upload.single
是一個內置的功能multer
。 在此處閱讀有關其他功能的更多信息。 同樣, img
需要匹配您輸入字段的名稱,即<input type="file" name="img">
這只是多種方法之一。 希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.