In diesem Artikel wird hauptsächlich der Fehler vorgestellt, 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
Bevor Sie eine Datei schreiben, tritt beim Aufrufen der fs.renameSync-Methode ein Fehler auf.
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 ist dies der Fall Es wird geschätzt, 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 Version unter 0.6 verwenden, können Sie util.pump verwenden
Dementsprechend muss der Code nur readStream.on im obigen Code ändern 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(); }); }
Das Obige ist das, was ich für alle zusammengestellt habe alle in der Zukunft.
Verwandte Artikel:
So implementieren Sie verschiedene Sortiermethoden mit js
So implementieren Sie ein Ratespiel mit JavaScript (ausführliches Tutorial)
So verwenden Sie das Knotenmodul und das NPM-Paketverwaltungstool
So verwenden Sie JS zum Implementieren der Eingabesuchfunktion
So implementieren Sie das WeChat Jump Game mit Three.js
Das obige ist der detaillierte Inhalt vonBeim Aufruf von fs.renameSync in Node.js tritt ein Fehler auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!