Node.js が fs.renameSync を呼び出すときに報告されるエラーに対処する方法 (エラー: EXDEV、クロスデバイス リンクは許可されていません)

小云云
リリース: 2017-12-27 13:43:32
オリジナル
1632 人が閲覧しました

この記事では、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=&#39;/show&#39; />");
  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(&#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();
 });
 }
ログイン後にコピー

PS: ノードのバージョン私が使用しているのは 0.10.69 ですが、0.6 より前のバージョンを使用している場合は、util.pump を使用できます

対応するコードは、上記のコードの readStream.on を次のように変更するだけです: (util モジュールの導入に注意してください)


util.pump(readStream,writeStream, function() {
 fs.unlinkSync(&#39;files.upload.path&#39;);
});
ログイン後にコピー

メソッド2:これははるかに単純です

form.uploaddir = 'tmp'(一時的なパスを書く) node.js. renameSyncメソッドの使い方_node.js

expressベースのWebSocketを使ったnode.jsの詳しい説明


Node.jsのasync関数の使い方

以上がNode.js が fs.renameSync を呼び出すときに報告されるエラーに対処する方法 (エラー: EXDEV、クロスデバイス リンクは許可されていません)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!