この記事では、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(); }); }
追記: 私が使用しているノードのバージョンは0.10.69 、0.6 より前のバージョンを使用している場合は、 util.pump を使用できます
対応するコードは、上記のコードの readStream.on を次のように変更するだけです: (util モジュールの導入に注意してください)
util.pump(readStream,writeStream, function() { fs.unlinkSync('files.upload.path'); });
方法 2:
この方法は非常に簡単です
form.uploadDir='tmp' (一時的なパスを書きます) を追加するだけです
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(); }); }
上記は私が皆さんのためにまとめたものです。これからのみんな。
関連記事:
jsを使用してさまざまなソートメソッドを実装する方法JavaScriptを使用して推測ゲームを実装する方法(詳細なチュートリアル)ノードモジュールとnpmパッケージ管理ツールの使用方法 JSの使い方入力検索機能を実装するThree.jsを使ったWeChatジャンプゲームの実装方法以上がNode.js で fs.renameSync を呼び出すときにエラーが発生しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。