使用 multer 和 express 上传图片
Posted
技术标签:
【中文标题】使用 multer 和 express 上传图片【英文标题】:upload image with multer and express 【发布时间】:2016-06-14 01:32:01 【问题描述】:我正在尝试使用 multer 和 express 上传照片,一切正常。但是当我想使用 fs 库动态创建目录时,我需要在multer.diskStorage()
函数中访问目标中的req.body.name
。
这可能吗?
这是我的代码:
var storage = multer.diskStorage(
destination: function (req, file, callback)
callback(null, './public/products');
,
filename: function (req, file, callback)
if (file.mimetype === 'image/jpg')
callback(null, file.fieldname + '-' + Date.now() + ".jpg");
else if (file.mimetype === 'image/jpeg' )
callback(null, file.fieldname + '-' + Date.now() + ".jpeg");
else if (file.mimetype === 'image/png')
callback(null, file.fieldname + '-' + Date.now() + ".png");
else if(file.mimetype !== 'image/jpg' || file.mimetype !== 'image/jpeg' || file.mimetype !== 'image/png' )
return false;
);
var Create_products = multer( storage : storage , limits: files:1 ).single('PRODUCT_PHOTO');
是不是错了?
【问题讨论】:
您希望根据必须存储数据的输入获得动态可能性? 是的,我想动态创建文件夹......每个文件夹都有一些信息,如 img 或 video 或...... 【参考方案1】:我个人在前端(Angular js)使用了 ngFileupload 模块,我从那里发送数据和文件,我通过 req.body.fieldname
访问它,我正在使用 mkdirp 模块代替 fs,你显然可以选择无论你想要什么。
我已经提供了演示示例来实现整个事情。
如果您需要任何说明,请告诉我。祝你好运。
路线
app.post('/whatever', funcname.single('file'), thisiscalledafterupload, route.func);
上传功能
var funcdata = multer.diskStorage(
destination: function (req, file, cb)
var newfoldername = req.body.foldername; //here the folder name is passed along with the files - I have used angular (ngfileupload)
mkdirp(__dirname + 'somethingroot/folder/' + newfoldername, function (err)
console.log(__dirname);
if (err) console.error(err)
cb(null, __dirname + 'somethingroot/folder/' + newfoldername);
);
,
filename: function (req, file, cb)
var f = Date.now() + '_';
cb(null, f + file.originalname)
//file saved now the thisiscalledafterupload will be called
)
var funcname = multer(
storage: funcdata
);
【讨论】:
以上是关于使用 multer 和 express 上传图片的主要内容,如果未能解决你的问题,请参考以下文章
javascript Multer上传图片(NodeJS Express)