我得到了图像上传工作在我的项目,但我想组织和整理它一点。
理想情况下,我希望我的图像上传在一个函数或控制器内完成。我以前让multer在我的路由文件中完成图像上传。像这样:
null
var upload = multer({
storage: multer.diskStorage({
destination: function(req, file, cb) {
cb(null, 'public/cms/images/uploads')
},
filename: function(req, file, cb) {
cb(null, randomString.generate({length: 7, charset: 'alphanumeric'}) + path.extname(file.originalname))
}
})
})
router.post('/fileupload', login_controller.requires_login, upload.single('imagefile'), test_controller.file_upload_post);
这类作品。这个问题是,我需要设置一些限制什么可以上传,也显示错误消息回模板。如果我把它从routes文件中分离出来,这将会更整洁。
为什么这不起作用?
我正在一个名为“upload_image”的控制器内创建一个函数,并在路由内调用它。
route.js:
router.post('/blogpost/create', blog_controller.upload_image, blog_controller.blog_create_post);
blogcontroller.js:
exports.upload_image = function (req, res, next) {
var upload = multer({
storage: multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'public/cms/images/uploads')
},
filename: function (req, file, cb) {
cb(null, randomString.generate({ length: 7, charset: 'alphanumeric' }) + path.extname(file.originalname))
}
})
})
upload.single('imagefile');
return next();
}
当我这样做时,req.body和req.file是未定义的。没有图像上传。除了我使用req.body或req.file的任何地方,没有错误消息,模板呈现良好的效果。
multer没有用表单数据修改请求对象吗?这不是意味着我可以在使用next()之后将它转发给我的另一个控制器吗。然后,我希望blog_controller.blog_create_post对请求执行所需的其他所有操作。
谢谢,希望你能帮忙。
调用
exports.upload_image = function (req, res, next) {
var upload = multer({
storage: multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'public/cms/images/uploads')
},
filename: function (req, file, cb) {
cb(null, randomString.generate({ length: 7, charset: 'alphanumeric' }) + path.extname(file.originalname))
}
})
})
function (req, res, next) {}
return next();
}
记住
因此,如果我正确理解 我没有测试过,但是类似的东西。exports.upload_image = function (req, res, next) {
var upload = multer({
storage: multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'public/cms/images/uploads')
},
filename: function (req, file, cb) {
cb(null, randomString.generate({ length: 7, charset: 'alphanumeric' }) + path.extname(file.originalname))
}
})
})
returnupload.single('imagefile')(req, res, next)
return next();
}