使用windows系统部署nodejs的时候,由于图片上传后的目录在C盘的临时文件夹下,如果我的代码部署在D盘,则使用fs.renameSync的时候可能会报错:
var fs = require("fs"),
util = require('util');
...
fs.renameSync(files.upload.path, "/tmp/test.png");
util.pump(readStream, writeStream, function() {
fs.unlinkSync(files.upload.path);
});
报错如下:
D:\tmp\tmp_dev_root\node.js>
D:\tmp\tmp_dev_root\node.js>node index.js
Server has started.
Request for /upload received.
About to route a request for /upload
Request handler 'upload' was called.
about to parse
parsing done
fs.js:439
return binding.rename(pathModule._makeLong(oldPath),
^
Error: EXDEV, cross-device link not permitted 'C:\Users\CLi\AppData\Local\Temp\df99513a93a1cbfbc26e076f8ae08b92'
at Object.fs.renameSync (fs.js:439:18)
at D:\tmp\tmp_dev_root\node.js\requestHandlers.js:34:8
at IncomingForm.parse (D:\tmp\tmp_dev_root\node.js\node_modules\formidable\lib\incoming_form.js:121:9)
at IncomingForm.EventEmitter.emit (events.js:93:17)
at IncomingForm._maybeEnd (D:\tmp\tmp_dev_root\node.js\node_modules\formidable\lib\incoming_form.js:383:8)
at IncomingForm.handlePart (D:\tmp\tmp_dev_root\node.js\node_modules\formidable\lib\incoming_form.js:212:12)
at File.end (D:\tmp\tmp_dev_root\node.js\node_modules\formidable\lib\file.js:71:5)
at WriteStream.flush (fs.js:1515:9)
at Object.oncomplete (fs.js:297:15)
解决:
var fs = require("fs"),
util = require('util');
...
//fs.renameSync(files.upload.path, "/tmp/test.png");
var readStream = fs.createReadStream(files.upload.path)
var writeStream = fs.createWriteStream("/tmp/test.png");
util.pump(readStream, writeStream, function() {
fs.unlinkSync(files.upload.path);
});
参考:
https://www.crifan.com/node_js_use_fs_renamesync_error_exdev_cross_device_link_not_permitted/
Comments