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 HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
Jun 02 Javascript
JQuery实现倒计时按钮的实现代码
Mar 23 Javascript
JS关键字变色实现思路及代码
Feb 21 Javascript
javascript上传图片前预览图片兼容大多数浏览器
Oct 25 Javascript
JavaScript中的toUTCString()方法使用详解
Jun 12 Javascript
javascript基本算法汇总
Mar 09 Javascript
React Native之ListView实现九宫格效果的示例
Aug 02 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
Jun 17 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
Dec 04 Javascript
浅谈Vue网络请求之interceptors实际应用
Feb 28 Javascript
关于vue面试题汇总
Mar 20 Javascript
使用JQuery自动完成插件Auto Complete详解
Jun 18 jQuery
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实现加减法验证码代码
2014/02/14 PHP
codeigniter数据库操作函数汇总
2014/06/12 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
php依赖注入知识点详解
2019/09/23 PHP
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
详解JavaScript RegExp对象
2017/02/04 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
Django实现全文检索的方法(支持中文)
2018/05/14 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
校园之声广播稿
2014/01/31 职场文书
上班打牌检讨书
2014/02/07 职场文书
《雨点》教学反思
2014/02/12 职场文书
喝酒检查书范文
2014/02/23 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
大学活动总结模板
2014/07/10 职场文书
公司离职证明样本
2014/09/13 职场文书
2014年学习部工作总结
2014/11/12 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
九年级语文教学反思
2016/03/03 职场文书
技术转让协议书
2016/03/19 职场文书
利用python做表格数据处理
2021/04/13 Python
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python