2012-08-30 53 views
5

在Debian上重命名文件Wheezy无法使用fs.rename或fs.renameSync。Node.JS fs.rename不起作用

这只发生在从/ tmp /移动到另一个位置的文件中。

报告的错误是:EXDEV,不允许跨设备链接。

+0

你可以看到这一点。我认为它有用ü [这里] [1] [1]:http://stackoverflow.com/questions/4568689/how-do-i-move-file-a-to-a-不同分区在节点js – SaliproPham

+0

可能重复[如何将文件a移动到Node.js中的不同分区或设备?](https://stackoverflow.com/questions/4568689/how-do-i -move-file-a-to-a-different-partition-or-device-in-node-js) – bugwheels94

回答

0

Debian Wheezy默认使用tmpfs作为/ tmp文件夹。

这可以通过修改/ etc/default/rcS来关闭。

RAMTMP=yes 

必须被设置为

RAMTMP=no 
+3

问题是Node fs.renameSync不能跨设备重命名,而不是某个特定的机器有不同的tmp设备。不要仅仅因为这个关闭RAMTMP。 (在当前的Debian上,Jessie RAMTMP不工作,/ tmp tmpfs通过systemd配置。)使用一些更智能的重命名,例如模块__mv__:http://stackoverflow.com/a/29287813/196206 – Messa

2

这是另一种解决方案,它为我的作品:

var fs = require("fs"), 
util = require('util'); 
... 
//fs.renameSync(files.upload.path, "/tmp/test.png"); 

var readStream = fs.createReadStream(files.upload.path) 
var writeStream = fs.createWriteStream("/tmp/test.png"); 

util.pump(readStream, writeStream, function() { 
    fs.unlinkSync(files.upload.path); 
});