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 相关文章推荐
JavaScript高级程序设计 读书笔记之八 Function类及闭包
Feb 27 Javascript
js获取对象为null的解决方法
Nov 21 Javascript
Bootstarp风格的toggle效果分享
Feb 23 Javascript
当jquery ajax遇上401请求的解决方法
May 19 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
May 24 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
Jun 03 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
Jun 22 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
Jul 07 Javascript
jQuery制作input提示内容(兼容IE8以上)
Jul 05 jQuery
redux中间件之redux-thunk的具体使用
Apr 17 Javascript
jQuery中的for循环var与let的区别
Apr 21 jQuery
Angularjs实现多图片上传预览功能
Jul 18 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
php print EOF实现方法
2009/05/21 PHP
PHP计算指定日期所在周的开始和结束日期的方法
2015/03/24 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
Javascript 二维数组
2009/11/26 Javascript
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
javascript闭包入门示例
2014/04/30 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
JQuery.validationEngine表单验证插件(推荐)
2016/12/10 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
解决vant的Toast组件时提示not defined的问题
2020/11/11 Javascript
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
python抖音表白程序源代码
2019/04/07 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
Python+OpenCV检测灯光亮点的实现方法
2020/11/02 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
电气专业应届生求职信
2013/11/01 职场文书
给老婆的保证书范文
2014/04/28 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
领导班子整改措施
2014/10/24 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
休假证明书
2015/06/24 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
Redis 哨兵集群的实现
2021/06/18 Redis
详解Spring事件发布与监听机制
2021/06/30 Java/Android
css3 文字断裂效果
2022/04/22 HTML / CSS