2012-08-30 102 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); 
});