ExpressJS Multer:将图像上载到服务器
我更新了Node.js和Express.js 我想先将一个图像上传到服务器(目录:uploads/spots),然后(同步)在MongoDB中上传表单数据的其余部分 我正在使用REST(方法帖子) app.route('/spots').post(users.requiresLogin,spots.create) 我正在使用Multer将图像更新到服务器中,并且可以正常工作ExpressJS Multer:将图像上载到服务器,express,multer,Express,Multer,我更新了Node.js和Express.js 我想先将一个图像上传到服务器(目录:uploads/spots),然后(同步)在MongoDB中上传表单数据的其余部分 我正在使用REST(方法帖子) app.route('/spots').post(users.requiresLogin,spots.create) 我正在使用Multer将图像更新到服务器中,并且可以正常工作 app.use(multer)( {dest:'./public/uploads/spots', onFileUploa
app.use(multer)(
{dest:'./public/uploads/spots',
onFileUploadStart:函数(文件){
var imagePath=file.path;
gm(imagePath).resize(850850).quality(70).noProfile().write('public/uploads/spots/850x850/')+file.name,function(err){
如果(!err){
gm(imagePath).resize(150150).quality(70).noProfile().write('public/uploads/spots/150x150/')+file.name,function(err){
如果(!err){
}
否则{
log('Error:'+err);
}
});
}
否则{
log('Error:'+err);
}
});
}
}));
解决方案不是使用onFileUploadStart
方法,而是在控制器中使用带回调的函数
路线
// Spots Routes
app.route('/spots')
.get(spots.list)
.post(users.requiresLogin,multer({ dest: './public/uploads/spots'}), spots.create);
控制器
exports.create = function(req, res) {
if (req.files.file)
exports.uploadImage(req.files.file,callback);
else
callback();
function callback(){
var spot = new Spot(JSON.parse(req.body.spot));
spot.user = req.user;
if (req.files.file)
spot.image = req.files.file.name;
else
spot.image = 'default.jpg';
spot.save(function (err) {
if (err) {
fs.unlink('public/uploads/spots/850x850/'+spot.image);
fs.unlink('public/uploads/spots/150x150/'+spot.image);
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
var socketio = req.app.get('socketio'); // tacke out socket instance from the app container
socketio.sockets.emit('spot.created.' + spot.municipality, {spot: spot, user: req.user});
socketio.sockets.emit('spot.created.' + spot.province, {spot: spot, user: req.user});
socketio.sockets.emit('spot.created.' + spot.community, {spot: spot, user: req.user});
socketio.sockets.emit('spot.created.' + spot.country, {spot: spot, user: req.user});
req.spot = spot;
Feedback.subscribeSpot(req);
Notify.getLocalSubscriptors(spot.municipality,spot.province,spot.community,spot.country,function(subscriptions){
Notify.create(req,null,spot,null,null,null,subscriptions,'spots/'+spot._id,false,'SPOT_CREATED', function(){
res.jsonp(spot);
});
});
}
});
}
};
exports.uploadImage = function(file, fn){
var imagePath = file.path;
gm(imagePath).resize(850, 850).quality(70).noProfile().write('public/uploads/spots/850x850/'+file.name, function (err) {
if (!err) {
gm(imagePath).resize(150, 150).quality(70).noProfile().write('public/uploads/spots/150x150/'+file.name, function (err) {
if (!err) {
if(fn)fn();
}
else{
console.log('Error: '+err);
}
});
}
else{
console.log('Error: '+err);
}
});
};