Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017-12-27 09:31
966 查看
在写一个文件上传的功能时候,调用fs.renameSync方法错误
出错 代码所在如下:
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='/show' />"); response.end(); }); }
大致分析后,预计是因为 跨磁盘分区移动 或操作文件会有权限问题。
下面提供两种解决办法:
方法一:
主要利用fs的createReadStream、createWriteSream和unlinkSync方法
具体代码如下:
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('end',function(){ fs.unlinkSync(files.upload.path); }); response.writeHead(200, {"Content-Type": "text/html"}); response.write("received image:<br/>"); response.write("<img src='/show' />"); response.end(); }); }
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' 即可(写一个临时路径)
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(, {"Content-Type": "text/html"}); response.write("received image:<br/>"); response.write("<img src='/show' />"); response.end(); }); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- 解决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 上传文件时 报错 EXDEV RENAME ERROR 怎么办?
- Node.js使用fs.renameSync报cross-device link not permitted错误
- node.js使用async完成同步调用
- Node.js的学习历程二同步异步调用等基础知识的理解
- Nodejs Error: Cannot find module 'unicode/category/So'
- Crosswalk Cordova windows下编译出现:bin\node_modules\q\q.js:126 throw e问题解决方法
- Cross platform debugging proxy for web developers base on NodeJS
- nodejs报错roll back,because of a error.node.js setup wizard ended prematurel
- node-webkit中的requirejs报错问题:path must be a string error in Require.js
- nodejs Error: request entity too large解决方案
- 解决最近windows版本Node.js中npm出现的“Error: ENOENT, stat 'C:\Users\UserName\AppData\Roaming\npm”的问题
- nodejs vue SyntaxError:Block-scoped declarations (let,const,function,class) not yet supported
- 通过ffi在node.js中调用动态链接库[转]
- Node.js 通过http调用外部接口
- 运行node提示:events.js:41 throw er; // Unhandled 'error' event
- NodeJs TypeError: First argument must be file descriptor解决方法
- Node.js 基础--01 函数的调用