この記事では、Node.js が fs.renameSync を呼び出すときに報告されるエラー (エラー: EXDEV、クロスデバイス リンクは許可されていません) を主に紹介します。必要な方は参考にしていただければ幸いです。みんな。
ファイルアップロード関数を作成するときに、fs.renameSyncメソッドを呼び出すときにエラーが発生しました
コードは次のとおりです:
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(); }); }
大まかな分析の後、移動時に権限の問題が発生することが予想されますディスクパーティションまたはオペレーティングファイル。
以下に 2 つのソリューションが提供されます:
方法 1:
主に fs の createReadStream、createWriteSream、および unlinkSync メソッドを使用します
具体的なコードは次のとおりです:
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: ノードのバージョン私が使用しているのは 0.10.69 ですが、0.6 より前のバージョンを使用している場合は、util.pump を使用できます
対応するコードは、上記のコードの readStream.on を次のように変更するだけです: (util モジュールの導入に注意してください)
util.pump(readStream,writeStream, function() { fs.unlinkSync('files.upload.path'); });
メソッド2:これははるかに単純です
form.uploaddir = 'tmp'(一時的なパスを書く) node.js. renameSyncメソッドの使い方_node.js expressベースのWebSocketを使ったnode.jsの詳しい説明Node.jsのasync関数の使い方
以上がNode.js が fs.renameSync を呼び出すときに報告されるエラーに対処する方法 (エラー: EXDEV、クロスデバイス リンクは許可されていません)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。