PHP中文网2017-04-17 16:46:27
express
form 添加这个:enctype="multipart/form-data"
input(type="file")
引用
var multiparty = require('connect-multiparty')
var multipartMiddleware = multiparty();
路由
app.post('/movie/save',multipartMiddleware,Movie.savePoster,Movie.save)
exports.savePoster = function(req, res, next) {
var posterData = req.files.uploadPoster
var filePath = posterData.path
var originalFilename = posterData.originalFilename
if (originalFilename) {
fs.readFile(filePath, function(err, data) {
var timestamp = Date.now()
var type = posterData.type.split('/')[1]
var poster = timestamp + '.' + type
**//将文件保存到特定的目录**
var newPath = path.join(__dirname, '../../', '/file/images/' + poster)
fs.writeFile(newPath, data, function(err) {
// 自定义
req.poster = poster
next()
})
})
}
else {
next()
}
}
最后可以参考:http://www.imooc.com/learn/197中关于上传海报的章节视频,这个是过期的,后面一章有升级的方法
阿神2017-04-17 16:46:27
建议用formidable,经过我这几天的实践,formidable的API设计更为合理,便于更多的自定义操作,最重要的是支持多文件上传。
connect-busboy没有上述的优点,而且不支持multipart
高洛峰2017-04-17 16:46:27
app.post('/ava',multipart(),function(req, res){
var filename = req.files.avatar.originalFilename || path.basename(req.files.avatar.path);
var targetPath = pathname + '/image_repository/avatar/' + filename;
fs.createReadStream(req.files.avatar.path).pipe(fs.createWriteStream(targetPath));
var _url = '/avatar/' + filename;
console.log(_url);
console.log(targetPath);
var _name = req.session.user;
//用module方法保存数据
User.update({name:_name},{$set:{avatar:_url}},function(err){
if (err) throw err;
});
res.json({
codetype : 200,
msg:{url:'http://' + req.headers.host + '/' + filename},
url:_url
});
//用entity方法保存数据,效果相同
//User.findOne({name:_name},function(err, doc){
// if (err) throw err;
// if (doc){
// doc.set({avatar:targetPath});
// doc.save();
// }else{
// console.log('no user');
// }
//});
//res.json({
// codetype : 200,
// msg:{url:'http://' + req.headers.host + '/' + filename},
// url:_url
//});
//var _img = req.files;
// console.log(_img);
//res.json(_img);
});
图片从前端用formdata对象传入,用流来把图片复制到你想要的文件夹下