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 相关文章推荐
指定位置如果有图片显示图片,无图片显示广告的JS
Jun 05 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
Oct 11 Javascript
JavaScript全排列的六种算法 具体实现
Jun 29 Javascript
JS图像无缝滚动脚本非常好用
Feb 10 Javascript
js post提交调用方法
Feb 12 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
May 25 Javascript
基于JS代码实现实时显示系统时间
Jun 16 Javascript
VsCode插件整理(小结)
Sep 14 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
Aug 25 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
Aug 06 Javascript
vue+Element-ui前端实现分页效果
Nov 15 Javascript
js 执行上下文和作用域的相关总结
Feb 08 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
PHP中list方法用法示例
2016/12/01 PHP
javascript URL锚点取值方法
2009/02/25 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
Flask模拟实现CSRF攻击的方法
2018/07/24 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
python3.x实现base64加密和解密
2019/03/28 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
怎样声明子类
2013/07/02 面试题
生产主管岗位职责
2013/11/10 职场文书
新春寄语大全
2014/04/09 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
2014年质检员工作总结
2014/11/18 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
Python 如何实现文件自动去重
2021/06/02 Python
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js