2013-12-12 5 views
8

Sto tentando di caricare un file nel mio nodo/app espresso, e sto ottenendo il seguente errore:Errore: ENOENT quando il file nel nodo di rinominare/app espresso

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

Ecco il codice rilevante dal mio app:

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; 

Quando controllo ciò che è in/tmp file è 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 

Questo è come io sto usando parser corpo:

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

Qualche idea? Ho provato a cambiare i permessi di tutta la mia app ma non ho preso il dado.

risposta

13

Hai controllato che il percorso di destinazione che stai utilizzando esiste? (forse intendi app.get('loc') + "/uploads/" ...)

Stranamente quando ciò accade (il file di origine esiste e la directory di destinazione non), il messaggio di errore ottiene solo i punti del file sorgente ... Quindi controlla se questo non è il problema.

Ricordare se si desidera spostare il file caricato su /a/b/c.txt, entrambi /a e /a/b devono già esistere.

Inoltre, se è necessario spostare il file su una partizione diversa, sarà necessario utilizzare qualcosa come this oppure verrà visualizzato un errore EXDEV.

1

Probabilmente non aiuterà il poster originale, ma nel caso in cui qualcun altro si imbattesse in questo problema e scopra che l'origine e la destinazione sembrano esistere, ma si sta verificando questo errore, si spera che ciò possa essere d'aiuto. Quando mi sono imbattuto in questo problema questo è il problema esatto che ho trovato - quando ho controllato, erano presenti sia l'origine (percorso completo per il file) che la destinazione (directory), ma la rinomina stava lanciando ENOENT.

Nel mio caso la soluzione era riconoscere che stavo usando la versione asincrona della funzione di creazione directory per creare la directory di destinazione. Di conseguenza, nel momento in cui si è verificato il rinominare, la directory di destinazione non esisteva ancora, ma non appena ho verificato che era completata e la directory era lì. Passando alla versione sincrona della creazione di directory risolto il problema.

Problemi correlati