在ExpressJS/NodeJS中移动文件

JR *_*lia 10 ubuntu file-upload file node.js express

我正在尝试使用NodeJS/ExpressJS 将上传的文件移动/tmphome目录:

fs.rename('/tmp/xxxxx', '/home/user/xxxxx', function(err){
    if (err) res.json(err);

console.log('done renaming');
});
Run Code Online (Sandbox Code Playgroud)

但它没有工作,也没有遇到任何错误.但是,当新的道路也在/tmp,那将是有效的.

我在使用Ubuntu,home是在不同的分区.任何修复?

谢谢

use*_*109 20

是的,fs.rename不会在两个不同的磁盘/分区之间移动文件.这是正确的行为.在linux中fs.rename提供相同的功能rename(2).

阅读此处发布的相关问题.

要得到你想要的东西,你必须做这样的事情:

var source = fs.createReadStream('/path/to/source');
var dest = fs.createWriteStream('/path/to/dest');

source.pipe(dest);
source.on('end', function() { /* copied */ });
source.on('error', function(err) { /* error */ });
Run Code Online (Sandbox Code Playgroud)


anv*_*rik 11

另一种方法是使用fs.writeFile.fs.unlink在回调中将从tmp目录中删除临时文件.

var oldPath = req.files.file.path;
var newPath = ...;

fs.readFile(oldPath , function(err, data) {
    fs.writeFile(newPath, data, function(err) {
        fs.unlink(oldPath, function(){
            if(err) throw err;
            res.send("File uploaded to: " + newPath);
        });
    }); 
}); 
Run Code Online (Sandbox Code Playgroud)