2013-12-12 8 views
8

benim düğüm/ekspres uygulamasında bir dosya yüklemek çalışılıyor ve aşağıdaki hatayı alıyorum: BuradaHata: ENOENT düğümünde dosyayı yeniden adlandırma/ekspres uygulaması

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

alakalı kodudur benim uygulaması: I/dosyayı tmp içinde ne olduğunu kontrol zaman

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; 

vardır: Ben vücut ayrıştırıcı kullanıyorum nasıl

[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 

budur:

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

Herhangi bir fikir? Uygulamamın tüm izinlerini değiştirmeyi denedim ama zar atmam.

cevap

13

Kullanmakta olduğunuz hedef yolunu kontrol ettiniz mi? (belki de app.get('loc') + "/uploads/" demek istediniz ...)

Bu durum gerçekleştiğinde (kaynak dosya mevcutsa ve hedef dizin bulunmuyorsa), hata mesajını yalnızca kaynak dosyaya yönlendirirsiniz ... Yani sorun olmadığını kontrol edin. Yüklenen dosyayı /a/b/c.txt'a taşımak istiyorsanız, hem /a hem de /a/b zaten var olmalıdır. Ayrıca, dosyayı farklı bir bölüme taşımanız gerekirse, this gibi bir şey kullanmanız veya EXDEV hatası alırsınız.

1

Muhtemelen orijinal postere yardımcı olmayacaktır, ancak başka birinin bu konuya girmesi durumunda ve kaynak ve hedefin her ikisinin de varlığını sürdürdüğünü ancak bu hataya koştuğunu fark ederse, bu yardımcı olacaktır. Bu soruna rastladığımda, bulduğum tam sorun - kontrol ettiğimde, hem kaynak (dosyaya tam yol) hem de hedef (dizin) mevcuttu, ancak yeniden adlandırmayı ENOENT yapıyordu. Benim durumumda çözüm, hedef dizini oluşturmak için dizin oluşturma işlevinin eşzamansız sürümünü kullandığımı fark etmekti. Sonuç olarak, yeniden adlandırma girişimi sırasında hedef dizin henüz mevcut değildi, ancak kontrol ettiğim anda tamamlanmış ve dizin oradaydı. Dizin oluşturmanın eşzamanlı sürümüne geçmek sorunu çözdü.