Home  >  Article  >  Web Front-end  >  An error occurs when calling fs.renameSync in Node.js?

An error occurs when calling fs.renameSync in Node.js?

亚连
亚连Original
2018-06-15 13:39:451977browse

This article mainly introduces the error reported when Node.js calls fs.renameSync (Error: EXDEV, cross-device link not permitted). It is of great practical value. Friends who need it can refer to it

before writing one When using the file upload function, there is an error in calling the fs.renameSync method.

The error code is as follows:

 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();
 });
 }

After a rough analysis, it is estimated that there is a permission issue when moving or operating files across disk partitions.

Two solutions are provided below:

Method 1:

Mainly use the createReadStream, createWriteSream and unlinkSync methods of fs

The specific code is as follows:

 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: The node version I use is 0.10.69. If you are using a version below 0.6, you can use util.pump

accordingly The code only needs to change the readStream.on in the above code to: (note the introduction of the util module)

util.pump(readStream,writeStream, function() {
 fs.unlinkSync(&#39;files.upload.path&#39;);
});

Method 2:

This is much simpler

Just add a form.uploadDir='tmp' (write a temporary path)

 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();
 });
 }

The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.

Related articles:

How to implement various sorting methods using js

How to implement the guessing game using JavaScript (detailed tutorial)

How to use the node module and npm package management tool

How to use JS to implement the input search function

How to implement WeChat Jump Game using Three.js

The above is the detailed content of An error occurs when calling fs.renameSync in Node.js?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn