Heim  >  Artikel  >  Web-Frontend  >  Node.js ruft die fs.renameSync-Fehlerberichtsbehandlungsmethode (Fehler: EXDEV, geräteübergreifende Verbindung nicht zulässig) auf

Node.js ruft die fs.renameSync-Fehlerberichtsbehandlungsmethode (Fehler: EXDEV, geräteübergreifende Verbindung nicht zulässig) auf

小云云
小云云Original
2017-12-27 13:43:321633Durchsuche

Dieser Artikel stellt hauptsächlich den Fehler vor, der beim Aufruf von fs.renameSync durch Node.js auftritt (Fehler: EXDEV, geräteübergreifende Verknüpfung nicht zulässig). Freunde, die ihn benötigen, können darauf verweisen kann jedem helfen.

Beim Schreiben einer Datei-Upload-Funktion ist ein Fehler beim Aufruf der fs.renameSync-Methode aufgetreten

Der Fehlercode lautet wie folgt:


 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();
 });
 }

Nach einer groben Analyse geht man davon aus, dass beim Verschieben oder Bearbeiten von Dateien über Festplattenpartitionen hinweg ein Berechtigungsproblem vorliegt.

Im Folgenden werden zwei Lösungen bereitgestellt:

Methode 1:

Verwenden Sie hauptsächlich die Methoden createReadStream, createWriteSream und unlinkSync von fs

Der spezifische Code lautet wie folgt:


 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();
 });
 }

PS: Die von mir verwendete Knotenversion ist 0.10.69. Wenn Sie eine der folgenden Versionen verwenden 0.6 können Sie Um den entsprechenden Code von util.pump zu verwenden

, ändern Sie einfach readStream.on im obigen Code in: (Beachten Sie die Einführung des util-Moduls)


util.pump(readStream,writeStream, function() {
 fs.unlinkSync(&#39;files.upload.path&#39;);
});

Methode 2:

Das ist viel einfacher

Fügen Sie ein form.uploadDir='tmp' hinzu (schreiben Sie einen temporären Pfad)


 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();
 });
 }

Verwandte Empfehlungen:

Anweisungen zur Verwendung der fs.renameSync-Methode in node.js_node.js

Detaillierte Erklärung von node.js mit Websocket basierend auf Express

So verwenden Sie die asynchrone Funktion in Node.js

Das obige ist der detaillierte Inhalt vonNode.js ruft die fs.renameSync-Fehlerberichtsbehandlungsmethode (Fehler: EXDEV, geräteübergreifende Verbindung nicht zulässig) auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn