NodeJS教程--基于ExpressJS框架的文件上传(windows下无法rename的情况)
发布于 12 年前 作者 huangdh3 9848 次浏览 最后一次编辑是 8 年前

NodeJS教程–基于ExpressJS框架的文件上传 看了上面一篇关于文件上传的这个代码,在测试windows下的时候是会报错,各位童鞋说了是因为windows下无法rename的原因! 就思考了下,如果只是图片一些小文件上传的话,我们可否去读取文件信息,然后在写回到一个新的文件,这样就不存在文件移动,但是会造成很多垃圾信息!

fs.readFile(tmp_path, function(error, data){
            fs.writeFile(target_path, data, function (err) {
                if (err) throw err;
                console.log('It\'s saved!');
            });
        });
13 回复

你确定上传成功了,找到临时文件先

嗯,我上传成功了~那个临时文件这样获取

var temp_path = req.files.uploadName.path

是成功滴~

@huangdh3 自己设置下临时路径吧

建议升级到8.0,我之前无法rename,现在成功了

8.o可以是把~谢了!

ie下上传图片,提示下载。楼主遇到过相同问题吗?

不懂,能说清楚点吗~

@huangdh3 搞定了,呵呵。是我上传后这样返回的res.send({ status: ‘success’, url: url });。windows ie会将返回来的json当成文件进行下载。后来我用text返回就好了。

fs.rename(tmp_path, target_path, function(err) {
  .....
  // 删除临时文件夹文件, 
  fs.unlink(tmp_path, function() { ... });
});

如果rename调用成功的话,express会自动删除(unlink)临时文件吧。如果非rename返回的时候,才需要调用unlink,是这样吗?

是的,rename类似于linux中mv指令!

好东西 啊 我也推荐个教程吧 bbs.w3hacker.com

在windows下,如果上传目录和要移动的目标目录不在同一个磁盘上,rename会失败.

回到顶部