Node.js で fs.renameSync を呼び出すときにエラーが発生しますか?

亚连
リリース: 2018-06-15 13:39:45
オリジナル
2036 人が閲覧しました

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

追記: 私が使用しているノードのバージョンは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' (一時的なパスを書きます) を追加するだけです

 function upload(response,request){
 console.log("upload called");
 var form = new formidable.IncomingForm();
 form.uploadDir=&#39;tmp&#39;;
 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=&#39;/show&#39; />");
  response.end();
 });
 }
ログイン後にコピー

上記は私が皆さんのためにまとめたものです。これからのみんな。

関連記事:

jsを使用してさまざまなソートメソッドを実装する方法

JavaScriptを使用して推測ゲームを実装する方法(詳細なチュートリアル)

ノードモジュールとnpmパッケージ管理ツールの使用方法

JSの使い方入力検索機能を実装する

Three.jsを使ったWeChatジャンプゲームの実装方法

以上がNode.js で fs.renameSync を呼び出すときにエラーが発生しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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