2013-12-12 37 views
8

我試圖上傳文件在我的節點/快遞應用程序,我收到以下錯誤:錯誤:ENOENT重命名的節點文件時/快遞應用

{ [Error: ENOENT, rename '/tmp/64124a9886fdb03f1faee159bc533776'] 
    errno: 34, 
    code: 'ENOENT', 
    path: '/tmp/64124a9886fdb03f1faee159bc533776' } 

/home/frankie/Projects/LP/routes/manager/deliverables.js:51 
          throw err; 
           ^
Error: ENOENT, rename '/tmp/64124a9886fdb03f1faee159bc533776' 

下面是相關的代碼我應用:

if (req.files.file.name !== '' && req.files.file.size !== 0) { 
    // this will move the uploaded file from the tmp folder to the uploads folder 
    fs.rename(req.files.file.path, app.get('loc') + "uploads/" + name + "-" + id + "/" + req.files.file.name, function (err) { 
     if (err) throw err; 

當我檢查什麼是在/ tmp目錄的文件有:

[email protected]:/tmp$ ll 
total 56 
drwxrwxrwt 12 root root 4096 Dec 12 11:33 ./ 
drwxr-xr-x 23 root root 4096 Sep 27 22:54 ../ 
-rw-rw-r-- 1 fiega fiega 903 Dec 12 11:33 13a26570f87297fd7f61785ef7d8772b 

這是我如何用肢體解析器:

app.use(express.cookieParser()); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 

任何想法?我試圖改變我的整個應用程序的權限,但沒有骰子。

回答

13

您是否檢查過您使用的目的地路徑? (也許你的意思是app.get('loc') + "/uploads/" ...)

奇怪的是,當發生這種情況時(源文件存在且目標目錄不存在),你只能得到指向源文件的錯誤信息......所以檢查是否不是問題。

請記住,如果您要將上傳的文件移動到/a/b/c.txt,那麼/a/a/b必須已經存在。

此外,如果您需要將文件移動到不同的分區,您將不得不使用類似this的東西,否則將會出現EXDEV錯誤。

1

可能不會幫助原來的海報,但萬一有人遇到這個問題,並發現源和目的地都似乎存在但正在運行到這個錯誤,希望這會有所幫助。當我遇到這個問題,這是我發現的確切問題 - 當我檢查時,來源(文件的完整路徑)和目的地(目錄)都存在,但重命名是拋出ENOENT。

在我的情況下,解決方案是識別我正在使用目錄創建功能的異步版本來創建目標目錄。因此,在嘗試重命名時,目標目錄尚不存在,但只要我檢查完成並且目錄在那裏。切換到目錄創建的同步版本解決了問題。