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之更有效率的字符串替换
Aug 02 Javascript
XENON基于JSON变种
Jul 27 Javascript
jquery 插件学习(六)
Aug 06 Javascript
jQuery检测鼠标左键和右键点击的方法
Mar 17 Javascript
鼠标经过出现气泡框的简单实例
Mar 17 Javascript
微信小程序 开发MAP(地图)实例详解
Jun 27 Javascript
Vue 2.0学习笔记之Vue中的computed属性
Oct 16 Javascript
Vue-Access-Control 前端用户权限控制解决方案
Dec 01 Javascript
微信小程序实现手指触摸画板
Jul 09 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
Aug 14 Javascript
Bootstrap实现省市区三级联动(亲测可用)
Jul 26 Javascript
JavaScript 实现同时选取多个时间段的方法
Oct 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
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
yii2中关于加密解密的那些事儿
2018/06/12 PHP
PHP标准库(PHP SPL)详解
2019/03/16 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
JavaScript实战(原生range和自定义特效)简单实例
2016/08/21 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
JavaScript验证知识整理
2017/03/24 Javascript
JavaScript实现无穷滚动加载数据
2017/05/06 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
思想政治自我鉴定
2013/10/06 职场文书
营业员个人总结的自我评价
2013/10/25 职场文书
财务出纳员岗位职责
2013/11/26 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
大学军训自我鉴定大全
2014/09/18 职场文书
运动会加油稿50字
2015/07/21 职场文书
创业计划书之酒吧
2019/12/02 职场文书
导游词之青岛崂山
2019/12/27 职场文书
什么是css原子化,有什么用?
2022/04/24 HTML / CSS