nodejsヒント:cross-device link not permitted,renameの間違った解決方法


node.js提示エラー:
Error:EXDEV:cross-device link not permitted,rename'C:\Users\THEDIIS~1\Appdata\Local\Temp\uplad_9 b 46 f 1 afc 2 f 9 ade 0704037 c 3 fb 707 d 271'-''E:/node-rumen/tmp/test.png'
ファイルアップロードの機能の場合、fs.renameSyncメソッドを呼び出すとエラーが発生します。
このヒントはエリアをまたいでファイルの名前を変更する権限の問題です。
解決方法
まずソースファイルから別のパーティションのターゲットファイルにコピーしてunlinkでいいです。

form.parse(request, function(error, fields, files) {
 console.log(“parsing done”);
 fs.renameSync(files.upload.path, “/tmp/test.png”);
});
せいにする

form.parse(request, function(error, fields, files) {
 console.log(“parsing done”);

 // fs.renameSync(files.upload.path, “/nodejs/case/two/img/test.png”);

 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);
 });
});
PS:nodeバージョンは0.19で上の方法が使えます。0.6以下のバージョンを使うと、util.pmpが使えます。
該当コードは上のコードの中でreadStream.onを変更するだけです。

util.pump(readStream,writeStream, function() {
 fs.unlinkSync('files.upload.path');
});
参考住所:https://stackoverflow.com/que
https://stackoverflow.com/que
方法二:
これはとても簡潔です。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(200, {“Content-Type”: “text/html”});
  response.write(“received image:<br/>”);
  response.write(“<img src='/show' />”);
  response.end();
 });
}
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。