Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
程序员文章站
2022-05-07 14:59:32
在写一个文件上传的功能时候,调用fs.renamesync方法错误
出错 代码所在如下:
function upload(response,request){...
在写一个文件上传的功能时候,调用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(); }); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 知乎创始人周源谈知乎的创业理念
推荐阅读