2016-05-11 2 views
3

J'ai un problème pour télécharger le fichier nodejs. J'ai lu stack1 et . mais je pense que ce différent cas sur la sortie du terminal comme celui-ci:Erreur: EXDEV: lien inter-périphérique non autorisé, renommer '/ tmp/on Ubuntu 16.04 LTS

> Unhandled rejection Error: EXDEV: cross-device link not permitted, 
> rename '/tmp/31941-53enly.png' -> 
> 'public/files/complaint/Screenshot_2016-05-01_01-16-55.png' 
>  at Error (native) 
>  at Object.fs.renameSync (fs.js:681:18) 
>  at null.<anonymous> (/home/faris/myprojects/orchestrale-server/routes/complaintimage.js:163:20) 
>  at tryCatcher (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/util.js:16:23) 
>  at Promise._settlePromiseFromHandler (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:502:31) 
>  at Promise._settlePromise (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:559:18) 
>  at Promise._settlePromise0 (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:604:10) 
>  at Promise._settlePromises (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:683:18) 
>  at Async._drainQueue (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/async.js:138:16) 
>  at Async._drainQueues (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/async.js:148:10) 
>  at Immediate.Async.drainQueues [as _onImmediate] (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/async.js:17:14) 
>  at processImmediate [as _immediateCallback] (timers.js:383:17) 

mon code:

if (_.isEmpty(req.files) == false) { 
     var tp = avatar_folder+req.files.file.name; 
     fs.renameSync(req.files.file.path, tp, function(err){}); 
     var avatar = req.files.file.name; 
     } 

code de travail sur un autre distro comme os élémentaire, mais quand je lance projet sur debian jessie ou ubuntu 16 LTS cette erreur résulte sur le terminal.

tout corps ne peut pas aider? ce code fonctionne parfaitement sur OS et Arch.

+0

Les deux questions que vous liez êtes causé par le même problème (vous ne pouvez pas renommer les fichiers sur les systèmes de fichiers/partitions). Vous devriez essayer de voir si vous pouvez configurer le middleware de téléchargement pour utiliser un répertoire temporaire sur le même système de fichiers que l'emplacement final des fichiers. La raison pour laquelle cela peut fonctionner sur d'autres distributions est que certaines ne créeront pas de partition séparée pour '/ tmp'. – robertklep

Répondre

-2

Oui, vous pouvez résoudre ce problème en tant que.

  1. installer mv par commande

    npm install mv --save 
    
  2. ajouter mv dans votre fichier nodejs

    var mv = require('mv');<br> 
    
  3. fichier move comme:

    mv('source_file', 'destination_file,' function(err) { 
        if (err) { throw err; } 
    console.log('file moved successfully'); 
    }; 
    
+0

bonne question ........ –

0

Pour résoudre ce problème, vous pouvez réécrire comme:

fs.writeFile(path_where_to_write, file, function(err) { 
    if (err) throw err; /*do something else.*/ 
}); 
/*and then Remove the file from tmp location*/ 
fs.unlink(tempPath); 

et pour plusieurs fichiers, vous pourriez itérer ce bloc en fonction de la longueur des fichiers.

5

Même problème. Solution: Lire le fichier temp, écrire le fichier dans nouvel emplacement et supprimez le fichier temporaire:

 // Read the file 
     fs.readFile(oldpath, function (err, data) { 
      if (err) throw err; 
      console.log('File read!'); 

      // Write the file 
      fs.writeFile(newpath, data, function (err) { 
       if (err) throw err; 
       res.write('File uploaded and moved!'); 
       res.end(); 
       console.log('File written!'); 
      }); 

      // Delete the file 
      fs.unlink(oldpath, function (err) { 
       if (err) throw err; 
       console.log('File deleted!'); 
      }); 
     });