解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted)
来源:互联网 发布:freebsd python 编辑:程序博客网 时间:2024/05/29 21:33
在写一个文件上传的功能时候,调用fs.renameSync方法错误
出错 代码所在如下:
1 function upload(response,request){ 2 console.log("upload called"); 3 var form = new formidable.IncomingForm(); 4 console.log("about to parse"); 5 form.parse(request, function(error, fields, files) { 6 console.log("parsing done"); 7 fs.renameSync(files.upload.path, "./tmp/test.jpg"); 8 response.writeHead(200, {"Content-Type": "text/html"}); 9 response.write("received image:<br/>");10 response.write("<img src='/show' />");11 response.end();12 });13 }
大致分析后,预计是因为 跨磁盘分区移动 或操作文件会有权限问题。
下面提供两种解决办法:
方法一:
主要利用fs的createReadStream、createWriteSream和unlinkSync方法
具体代码如下:
1 function upload(response,request){ 2 console.log("upload called"); 3 var form = new formidable.IncomingForm(); 4 console.log("about to parse"); 5 form.parse(request, function(error, fields, files) { 6 console.log("parsing done"); 7 // fs.renameSync(files.upload.path, "./tmp/test.jpg"); 8 var readStream=fs.createReadStream(files.upload.path); 9 var writeStream=fs.createWriteStream("./tmp/test.jpg");10 readStream.pipe(writeStream);11 readStream.on('end',function(){12 fs.unlinkSync(files.upload.path);13 });14 response.writeHead(200, {"Content-Type": "text/html"});15 response.write("received image:<br/>");16 response.write("<img src='/show' />");17 response.end();18 });19 }
PS:我用的node版本是0.10.69,如果使用的是0.6以下的版本,可以使用util.pump
相应代码只需将上面的代码中readStream.on处改成:(注意引入util模块)
util.pump(readStream,writeStream, function() { fs.unlinkSync('files.upload.path');});
方法二:
这种就简洁很多了
添加一个 form.uploadDir='tmp' 即可(写一个临时路径)
1 function upload(response,request){ 2 console.log("upload called"); 3 var form = new formidable.IncomingForm(); 4 form.uploadDir='tmp'; 5 6 console.log("about to parse"); 7 form.parse(request, function(error, fields, files) { 8 console.log("parsing done"); 9 fs.renameSync(files.upload.path, "./tmp/test.jpg");10 response.writeHead(200, {"Content-Type": "text/html"});11 response.write("received image:<br/>");12 response.write("<img src='/show' />");13 response.end();14 });15 }16
0 0
- 解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted)
- Node.js中所用的fs.renameSync出错:Error: EXDEV, cross-device link not permitted
- Node.js用fs.renameSync报cross-device link not permitted错
- Node.js用fs.renameSync报cross-device link not permitted错
- 解决nodejs调用fs.renameSync报错的问题
- Docker 升级 npm v3 报错 cross-device link not permitted, rename
- Node.js 上传文件formidable时使用fs.renameSync报错
- NODE.JS 上传文件时 报错 EXDEV RENAME ERROR 怎么办?
- Node.js编程时fs.renameSync出错
- react-native ERROR EPERM: operation not permitted报错解决
- 如何解决Device Emulator 报 Error:Could not read save-state file的问题
- 如何解决Device Emulator 报 Error:Could not read save-state file的问题
- 解决adb调试报错error:device not found
- 解决adb调试报错error:device not found
- fs.renameSync()运行时报错
- 使用npm install报错-4048 operation not permitted解决
- npm install 报错(npm ERR! errno -4048,Error: EPERM: operation not permitted,)解决方法
- 使用npm install报错-4048 operation not permitted问题
- 简单的,使用套接字实现TCP通信(用线程实现并发)
- HDU1269 迷宫城堡,Tarjan算法入门
- html简介
- java爬虫
- 【51nod】1027 大数乘法
- 解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted)
- ajax同步和异步问题
- 静态分析工具PMD使用说明
- SSL P1407【树】哈夫曼树(一)
- C语言程序风格
- MyBatis与MySQL交互
- ViewStub的那些事儿
- 架构设计:系统存储(9)——MySQL数据库性能优化(5)
- [poj1275] 出纳员的雇佣Cashier Employment