Maison > interface Web > js tutoriel > le corps du texte

Node.js appelant la méthode de gestion du rapport d'erreurs fs.renameSync (Erreur : EXDEV, lien entre appareils non autorisé)

小云云
Libérer: 2017-12-27 13:43:32
original
1690 Les gens l'ont consulté

Cet article présente principalement l'erreur signalée lorsque Node.js appelle fs.renameSync (Erreur : EXDEV, lien multi-appareils non autorisé). Il a une grande valeur pratique. Les amis qui en ont besoin pourront s'y référer. peut aider tout le monde.

Lors de l'écriture d'une fonction de téléchargement de fichier, une erreur s'est produite lors de l'appel de la méthode fs.renameSync

Le code d'erreur est le suivant :


 function upload(response,request){
 console.log("upload called");
 var form = new formidable.IncomingForm();
 console.log("about to parse");
 form.parse(request, function(error, fields, files) {
  console.log("parsing done");
  fs.renameSync(files.upload.path, "./tmp/test.jpg");
  response.writeHead(200, {"Content-Type": "text/html"});
  response.write("received image:<br/>");
  response.write("<img src=&#39;/show&#39; />");
  response.end();
 });
 }
Copier après la connexion

Après une analyse approximative, on estime qu'il existe un problème d'autorisation lors du déplacement ou de l'exploitation de fichiers sur des partitions de disque.

Deux solutions sont proposées ci-dessous :

Méthode 1 :

Utiliser principalement les méthodes createReadStream, createWriteSream et unlinkSync de fs

Le code spécifique est le suivant :


 function upload(response,request){
 console.log("upload called");
 var form = new formidable.IncomingForm();
 console.log("about to parse");
 form.parse(request, function(error, fields, files) {
  console.log("parsing done");

 // fs.renameSync(files.upload.path, "./tmp/test.jpg");
  var readStream=fs.createReadStream(files.upload.path);
  var writeStream=fs.createWriteStream("./tmp/test.jpg");
  readStream.pipe(writeStream);
  readStream.on(&#39;end&#39;,function(){
  fs.unlinkSync(files.upload.path);
  });

  response.writeHead(200, {"Content-Type": "text/html"});
  response.write("received image:<br/>");
  response.write("<img src=&#39;/show&#39; />");
  response.end();
 });
 }
Copier après la connexion

PS : La version du nœud que j'utilise est la 0.10.69. 0.6, vous pouvez Pour utiliser le code correspondant de util.pump

, remplacez simplement readStream.on dans le code ci-dessus par : (notez l'introduction du module util)


util.pump(readStream,writeStream, function() {
 fs.unlinkSync(&#39;files.upload.path&#39;);
});
Copier après la connexion

Méthode 2 :

C'est beaucoup plus simple

Ajouter un form.uploadDir='tmp' (écrire un chemin temporaire)


 function upload(response,request){
 console.log("upload called");
 var form = new formidable.IncomingForm();
 form.uploadDir=&#39;tmp&#39;;
 console.log("about to parse");
 form.parse(request, function(error, fields, files) {
  console.log("parsing done");
  fs.renameSync(files.upload.path, "./tmp/test.jpg");
  response.writeHead(, {"Content-Type": "text/html"});
  response.write("received image:<br/>");
  response.write("<img src=&#39;/show&#39; />");
  response.end();
 });
 }
Copier après la connexion

Recommandations associées :

Instructions pour l'utilisation de la méthode fs.renameSync dans node.js_node.js

Explication détaillée de node.js en utilisant websocket basé sur express

Comment utiliser la fonction asynchrone dans Node.js

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal