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 相关文章推荐
jquery插件之easing 动态菜单
Aug 21 Javascript
JavaScript避免内存泄露及内存管理技巧
Sep 05 Javascript
详细分析JavaScript变量类型
Jul 08 Javascript
详解JavaScript 中的 replace 方法
Jan 01 Javascript
详解JavaScript节流函数中的Throttle
Jul 16 Javascript
JS FormData上传文件的设置方法
Jul 05 Javascript
AngularJS中的路由使用及实现代码
Oct 09 Javascript
ES6 中可以提升幸福度的小功能
Aug 06 Javascript
微信小程序 腾讯地图显示偏差问题解决
Jul 27 Javascript
微信小程序实现轨迹回放的示例代码
Dec 13 Javascript
vue中根据时间戳判断对应的时间(今天 昨天 前天)
Dec 20 Javascript
ant design vue导航菜单与路由配置操作
Oct 28 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
截获网站title标签之家内容的例子
2006/10/09 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
yii中widget的用法
2014/12/03 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
js 可拖动列表实现代码
2011/12/13 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
Json解析的方法小结
2016/06/22 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
js实现一键复制功能
2017/03/16 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
python之yield表达式学习
2014/09/02 Python
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
详解python 爬取12306验证码
2019/05/10 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
h5封装下拉刷新
2020/08/25 HTML / CSS
函数指针的定义是什么
2016/08/14 面试题
学期自我鉴定范文
2013/10/01 职场文书
入党转预备思想汇报
2014/01/07 职场文书
初二政治教学反思
2014/01/12 职场文书
便利店投资创业计划书
2014/02/08 职场文书
企业标语口号
2014/06/10 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
运动员加油词
2015/07/18 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang