2013-12-12 11 views
8

Tôi đang cố gắng để tải lên một tập tin trong nút/app nhanh của tôi, và tôi nhận được lỗi sau:Lỗi: ENOENT khi đổi tên tập tin trong nút/nhanh ứng dụng

{ [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' 

Đây là mã có liên quan từ tôi ứng dụng:

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; 

Khi tôi kiểm tra những gì có trong/tmp tập tin là có:

[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 

Đây là cách tôi đang sử dụng phân tích cú pháp cơ thể:

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

Bất kỳ ý tưởng nào? Tôi đã thử thay đổi quyền của toàn bộ ứng dụng của mình nhưng không có súc sắc.

Trả lời

13

Bạn đã kiểm tra đường dẫn đích bạn đang sử dụng chưa? (có thể bạn có nghĩa là app.get('loc') + "/uploads/" ...)

Thật kỳ lạ khi điều này xảy ra (tệp nguồn tồn tại và thư mục đích), thông báo lỗi bạn chỉ nhận được tệp nguồn ... Vì vậy, hãy kiểm tra xem đó có phải là vấn đề không.

Hãy nhớ nếu bạn muốn di chuyển tệp được tải lên /a/b/c.txt, cả hai /a/a/b phải đã tồn tại.

Ngoài ra, nếu bạn cần di chuyển tệp sang phân vùng khác, bạn sẽ phải sử dụng một cái gì đó như this hoặc bạn sẽ gặp lỗi EXDEV.

1

Có lẽ sẽ không giúp áp phích gốc, nhưng trong trường hợp ai đó gặp sự cố này và thấy rằng nguồn và đích cả dường như tồn tại nhưng đang chạy vào lỗi này, hy vọng điều này sẽ hữu ích. Khi tôi gặp phải vấn đề này, đây là vấn đề chính xác mà tôi đã tìm thấy - khi tôi kiểm tra, cả nguồn (đường dẫn đầy đủ đến tệp tin) và đích (thư mục) đã có mặt, nhưng việc đổi tên đã được gửi ENOENT.

Trong trường hợp của tôi, giải pháp là nhận ra rằng tôi đang sử dụng phiên bản không đồng bộ của hàm tạo thư mục để tạo thư mục đích. Kết quả là, tại thời điểm đổi tên đã cố gắng thư mục đích chưa tồn tại, nhưng ngay sau khi tôi kiểm tra nó đã hoàn thành và thư mục đã có. Chuyển sang phiên bản đồng bộ của việc tạo thư mục đã khắc phục được sự cố.

Các vấn đề liên quan