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='/show' />"); 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('end',function(){ fs.unlinkSync(files.upload.path); }); response.writeHead(200, {"Content-Type": "text/html"}); response.write("received image:<br/>"); response.write("<img src='/show' />"); 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('files.upload.path'); });
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='tmp'; 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='/show' />"); 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!