跳到主要内容
CNode

求一个上传文件的小例子,网上能找到的都是有问题的,我用的是express 版本是最新的

社区
Hhc2014发布于 12 年前最后回复 12 年前
1259770
查看回复

回复 (12)

H
hc2014#1212 年前
引用 youxiachai定义了两次???应该一个就够了...

@youxiachai 一直用的都是管理员账号

Y
youxiachai#1112 年前
引用 youxiachai定义了两次???应该一个就够了...

@hc2014 用管理员账号跑吧....我倒是没碰到过这样的问题..

H
hc2014#1012 年前
引用 youxiachai定义了两次???应该一个就够了...

@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'

Y
youxiachai#912 年前
app.use(mult());
app.use(mult({ uploadDir: 'd:\' }));

定义了两次???应该一个就够了...

app.use(mult({ uploadDir: 'd:\' }));
H
hc2014#812 年前
引用 ravenwang建议了解清楚HTTP协议的上传机制

@ravenwang 试过啦,也是不行,他还是会存到c盘的那个临时文件夹中去

R
ravenwang#712 年前
引用 ravenwang建议了解清楚HTTP协议的上传机制

@hc2014 路径字符串转义试试 'd:\\'

H
hc2014#612 年前
引用 ravenwang建议了解清楚HTTP协议的上传机制

@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); });

H
hc2014#512 年前
引用 ravenwang建议了解清楚HTTP协议的上传机制

@ravenwang 我引用了var mult=require('connect-multiparty'); 然后 app.use(mult()); app.use(mult({ uploadDir: 'd:\' })); 但是 存放的路径还是tmp这个临时路径

R
ravenwang#412 年前
引用 ravenwang建议了解清楚HTTP协议的上传机制

@hc2014 要解决这个问题你需要multiparty或者busboy

H
hc2014#312 年前
引用 ravenwang建议了解清楚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中

R
ravenwang#212 年前
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协议的上传机制

H
hc2014#112 年前

来个人啊,网上找到的都是用的之前版本的express.现在的express没有Body-parser了。

参与回复

登录后即可参与回复。登录