求一个上传文件的小例子,网上能找到的都是有问题的,我用的是express 版本是最新的
发布于 10 年前 作者 hc2014 5385 次浏览 最后一次编辑是 8 年前
12 回复

来个人啊,网上找到的都是用的之前版本的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 一直用的都是管理员账号

回到顶部