Multer上传不是一个功能
Multer upload is not a function
我正在使用 Multer 制作上传文件系统。我按照 Github 页面的说明进行操作,但它不起作用。
const express= require('express');
const app = express();
const multer = require('multer');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '/uploads');
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now());
}
});
const upload = multer({ storage: storage });
app.post('/editPhoto',upload.single('avatar'),function(req,res,next){
upload(req,res,function(err){
if(err){
res.json({success:false,message:err});
}
else{
res.json({success:true,message:"Photo was updated !"});
}
});
});
我得到TypeError: upload is not a function
我做错了什么?
编辑
我按照你说的和医生说的做了。
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads');
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now());
}
});
app.post('/editPhoto',function(req,res,next){
var upload = multer({ storage:storage}).single('userPhoto');
upload(req,res,function(err){
console.log(req.file);
if(err){
res.json({success:false,message:err});
}
else{
res.json({success:true,message:"Photo was updated !"});
}
});
});
req.file 未定义
当我这样尝试时
var upload = multer({ storage:storage});
app.post('/editPhoto',function(req,res,next){
upload(req,res,function(err){
console.log(req.file);
if(err){
res.json({success:false,message:err});
}
else{
res.json({success:true,message:"Photo was updated !"});
}
});
});
我得到上传不是一个函数
正如@Aabid 在评论中所说,您不需要同时使用控制器中的 multer 中间件和上传。
您可以使用:
app.post('/editPhoto', upload.single('avatar'), (req, res, next) => {
// here in the req.file you will have the uploaded avatar file
})
或者您可以使用:
app.post('/editPhoto', (req, res, next) => {
upload(req, res, function (err) {
if (err) {
// This is a good practice when you want to handle your errors differently
return
}
// Everything went fine
})
})
所以你使用这两种方法中的一种,不能同时使用两种方法。
// Multer upload config
const fs = require('fs');
const path = require('path');
const multer = require('multer');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '/tmp/')
},
filename: function (req, file, cb) {
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9)
cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname))
}
})
const upload = multer({storage: storage});
app.post('/uploadPhoto', (req, res, next) => {
upload.single('filename_here')(req, res, function (err) {
if (err) {
// A Multer error occurred when uploading.
res.json({msg: err.message})
} else {
// Everything went fine.
// req.file
// {
// fieldname: 'filename_here',
// originalname: 'nhancv_dep_trai.png',
// encoding: '7bit',
// mimetype: 'image/png',
// destination: '/tmp/',
// filename: 'filename_here-1607694392023-220481630',
// path: '/tmp/filename_here-1607694392023-220481630',
// size: 5907
// }
const file = req.file;
console.log(file);
// Delete tmp
try {
// fs.unlinkSync(file.path);
} catch (e) {
// Ignore
console.error(e);
}
res.json({msg: 'ok'});
}
});
})
测试
curl --location --request POST '<host>:<port>/uploadPhoto' \
--form 'filename_here=@"/Users/nhancv/Desktop/nhancv_dep_trai.png"'
var multer = require('multer');
var upload = multer({ dest: './temp/hh' })
var cpUpload = upload.fields([{ name: 'audio_file', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
app.post('/v1/index/uploads', cpUpload, function (req, res, next) {
console.log(req.files['audio_file'][0]);
console.log(req.files['gallery']);
})
我正在使用 Multer 制作上传文件系统。我按照 Github 页面的说明进行操作,但它不起作用。
const express= require('express');
const app = express();
const multer = require('multer');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '/uploads');
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now());
}
});
const upload = multer({ storage: storage });
app.post('/editPhoto',upload.single('avatar'),function(req,res,next){
upload(req,res,function(err){
if(err){
res.json({success:false,message:err});
}
else{
res.json({success:true,message:"Photo was updated !"});
}
});
});
我得到TypeError: upload is not a function
我做错了什么?
编辑
我按照你说的和医生说的做了。
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads');
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now());
}
});
app.post('/editPhoto',function(req,res,next){
var upload = multer({ storage:storage}).single('userPhoto');
upload(req,res,function(err){
console.log(req.file);
if(err){
res.json({success:false,message:err});
}
else{
res.json({success:true,message:"Photo was updated !"});
}
});
});
req.file 未定义
当我这样尝试时
var upload = multer({ storage:storage});
app.post('/editPhoto',function(req,res,next){
upload(req,res,function(err){
console.log(req.file);
if(err){
res.json({success:false,message:err});
}
else{
res.json({success:true,message:"Photo was updated !"});
}
});
});
我得到上传不是一个函数
正如@Aabid 在评论中所说,您不需要同时使用控制器中的 multer 中间件和上传。
您可以使用:
app.post('/editPhoto', upload.single('avatar'), (req, res, next) => {
// here in the req.file you will have the uploaded avatar file
})
或者您可以使用:
app.post('/editPhoto', (req, res, next) => {
upload(req, res, function (err) {
if (err) {
// This is a good practice when you want to handle your errors differently
return
}
// Everything went fine
})
})
所以你使用这两种方法中的一种,不能同时使用两种方法。
// Multer upload config
const fs = require('fs');
const path = require('path');
const multer = require('multer');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '/tmp/')
},
filename: function (req, file, cb) {
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9)
cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname))
}
})
const upload = multer({storage: storage});
app.post('/uploadPhoto', (req, res, next) => {
upload.single('filename_here')(req, res, function (err) {
if (err) {
// A Multer error occurred when uploading.
res.json({msg: err.message})
} else {
// Everything went fine.
// req.file
// {
// fieldname: 'filename_here',
// originalname: 'nhancv_dep_trai.png',
// encoding: '7bit',
// mimetype: 'image/png',
// destination: '/tmp/',
// filename: 'filename_here-1607694392023-220481630',
// path: '/tmp/filename_here-1607694392023-220481630',
// size: 5907
// }
const file = req.file;
console.log(file);
// Delete tmp
try {
// fs.unlinkSync(file.path);
} catch (e) {
// Ignore
console.error(e);
}
res.json({msg: 'ok'});
}
});
})
测试
curl --location --request POST '<host>:<port>/uploadPhoto' \
--form 'filename_here=@"/Users/nhancv/Desktop/nhancv_dep_trai.png"'
var multer = require('multer');
var upload = multer({ dest: './temp/hh' })
var cpUpload = upload.fields([{ name: 'audio_file', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
app.post('/v1/index/uploads', cpUpload, function (req, res, next) {
console.log(req.files['audio_file'][0]);
console.log(req.files['gallery']);
})