Heim > Web-Frontend > js-Tutorial > Hauptteil

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

小云云
Freigeben: 2017-12-27 13:43:32
Original
1716 Leute haben es durchsucht

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 dem Login kopieren

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();
 });
 }
Nach dem Login kopieren

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;);
});
Nach dem Login kopieren

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();
 });
 }
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage