解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted)
2016-12-10 10:45
489 查看
在写一个文件上传的功能时候,调用fs.renameSync方法错误
出错 代码所在如下:
大致分析后,预计是因为 跨磁盘分区移动 或操作文件会有权限问题。
下面提供两种解决办法:
方法一:
主要利用fs的createReadStream、createWriteSream和unlinkSync方法
具体代码如下:
PS:我用的node版本是0.10.69,如果使用的是0.6以下的版本,可以使用util.pump
相应代码只需将上面的代码中readStream.on处改成:(注意引入util模块)
方法二:
这种就简洁很多了
添加一个 form.uploadDir='tmp' 即可(写一个临时路径)
出错 代码所在如下:
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
相关文章推荐
- 解决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出错:Error: EXDEV, cross-device link not permitted
- node.js 报错 Error: write EPIPE 问题解决!
- 【puppeteer+Node.js安装环境】之WebStorm编辑器运行失败问题:Error: Cannot find module 'puppeteer'并且代码出不来“asnyc”标识以及有红色波浪线解决办法
- 解决最近windows版本Node.js中npm出现的“Error: ENOENT, stat 'C:\Users\UserName\AppData\Roaming\npm”的问题
- Crosswalk Cordova windows下编译出现:bin\node_modules\q\q.js:126 throw e问题解决方法
- node.js + express 使用socket.io 客户端出现socket.io.js 404的问题解决
- 解决在firefox下js调用as失败问题
- 巧妙解决js内容调用导致页面加载慢的问题
- node-webkit中的requirejs报错问题:path must be a string error in Require.js
- JSP、AJax中文乱码问题解决,escape(), encodeURI(), encodeURIComponent(),js对参数连续两次调用 encodeURI(String) 方法
- 程序中和有js函数的网页交互,线程中调用 get_Script 就会错误的解决方法,由于COM的线程安全问题
- Node.js中AES加密和其它语言不一致问题解决办法
- Node.js Cannot find module 'xxx' 问题解决
- node.js开发指南中出现的问题 has no method 'router'解决办法
- 使用dwr同步调用导致无法获取js方法的返回结果问题的解决办法
- 解决!关于,js 调用隐藏的服务器Button,缺少对象的问题
- 解决VS 2010调用OpenGL时遇到的问题:error LNK2019
- 对于有些Android手机cp命令不可用 mv命令引起cross-device link 问题解决