Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)


Posted in Javascript onDecember 27, 2017

在写一个文件上传的功能时候,调用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();
 });
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
33种Javascript 表格排序控件收集
Dec 03 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
Apr 28 Javascript
Web前端开发之水印、图片验证码
Nov 27 Javascript
ionic开发中点击input时键盘自动弹出
Dec 23 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
Jan 21 Javascript
jQuery排序插件tableSorter使用方法
Feb 10 Javascript
JS+CSS实现滚动数字时钟效果
Dec 25 Javascript
angularJS实现动态添加,删除div方法
Feb 27 Javascript
深入理解JavaScript的值传递和引用传递
Oct 24 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
May 14 Javascript
js实现固定区域内的不重叠随机圆
Oct 24 Javascript
Ajax实现异步加载数据
Nov 17 Javascript
VSCode 配置React Native开发环境的方法
Dec 27 #Javascript
VSCode配置react开发环境的步骤
Dec 27 #Javascript
在vue项目中安装使用Mint-UI的方法
Dec 27 #Javascript
AngularJS集合数据遍历显示的实例
Dec 27 #Javascript
vue.js整合mint-ui里的轮播图实例代码
Dec 27 #Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
Dec 27 #Javascript
Vue 过滤器filters及基本用法
Dec 26 #Javascript
You might like
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
php tp验证表单与自动填充函数代码
2012/02/22 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
win7系统配置php+Apache+mysql环境的方法
2015/08/21 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
js闭包的用途详解
2014/11/09 Javascript
JS JQUERY实现滚动条自动滚到底的方法
2015/01/09 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
javascript变量提升和闭包理解
2018/03/12 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
使用python3构建文件传输的方法
2019/02/13 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
Django密码存储策略分析
2020/01/09 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
python编程的核心知识点总结
2021/02/08 Python
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
大型会议接待方案
2014/03/01 职场文书
公证委托书格式
2014/09/13 职场文书
校友会致辞
2015/07/30 职场文书
2016年教师寒假学习心得体会
2015/10/09 职场文书
2016年社区文体活动总结
2016/04/06 职场文书