来个人啊,网上找到的都是用的之前版本的express.现在的express没有Body-parser了。
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
app.post('/upload', multipartMiddleware, function(req, resp) {
console.log(req.body, req.files);
// don't forget to delete all req.files when done
});
建议了解清楚HTTP协议的上传机制
@ravenwang 用了’connect-multiparty’ 上传文件能够搞定了,但是现在有个问题,就是win7下他会把数据双传到C:\Users\hc\AppData\Local\Temp这个临时文件夹,然后用fs.rename的时候会报错。我查了一下 说是win7权限的问题,然后修改一下 上传的临时文件夹就行了 我写成:app.use(mult({ uploadDir: '/upload }));也用了绝对路径app.use(mult({ uploadDir: ‘d:\’ })); 但是没用 ,上传的文件依旧是在temp中
@hc2014 要解决这个问题你需要multiparty或者busboy
@ravenwang 我引用了var mult=require(‘connect-multiparty’); 然后 app.use(mult()); app.use(mult({ uploadDir: ‘d:\’ })); 但是 存放的路径还是tmp这个临时路径
@ravenwang 这个是我 后台的代码:
app.post(’/views/upload.html’,function(req,res){
var obj = req.files.codecsv;
var tmp_path = obj.path;
var new_path = “./public/upload/”+obj.name;
console.log(“临时路径:”+tmp_path);
console.log(“新路径:”+new_path);
fs.rename(tmp_path,new_path,function(err){
if(err){
throw err;
}
})
//console.log(req.files);
});
@hc2014 路径字符串转义试试 ‘d:\\’
@ravenwang 试过啦,也是不行,他还是会存到c盘的那个临时文件夹中去
app.use(mult());
app.use(mult({ uploadDir: 'd:\' }));
定义了两次???应该一个就够了…
app.use(mult({ uploadDir: 'd:\' }));
@youxiachai 原来如此,果然是这个问题。但是之前以为是放在c盘默认的临时文件夹才会出现错误,现在放在D盘还是一样会出现这个错误,网上查了下的都说是因为win7放在c盘没权限什么的问题,可是现在在D盘呢?
app.post(’/views/upload.html’,function(req,res){
var obj = req.files.codecsv;
var tmp_path = obj.path;
var new_path = “./public/upload/”+obj.name;
console.log(“临时路径:”+tmp_path);
console.log(“新路径:”+new_path);
fs.rename(tmp_path,new_path,function(err){
if(err){
throw err;
}
})
//console.log(req.files);
});
C:\Users\hc>node C:\Users\hc\Desktop\node\server.js 临时路径:d:\7736-cm9q4.jpg 新路径:./public/upload/样本登陆.jpg
C:\Users\hc\Desktop\node\server.js:65 throw err; ^ Error: ENOENT, rename ‘d:\7736-cm9q4.jpg’
@hc2014 用管理员账号跑吧…我倒是没碰到过这样的问题…
@youxiachai 一直用的都是管理员账号