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 06 Javascript
JavaScript实现文字与图片拖拽效果的方法
Feb 16 Javascript
JS控制表格实现一条光线流动分割行的方法
Mar 09 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
Dec 04 Javascript
javascript原生ajax写法分享
Apr 10 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
Feb 13 Javascript
jQuery Datatables表头不对齐的解决办法
Nov 27 jQuery
jquery应用实例分享_实现手风琴特效
Feb 01 jQuery
基于Layui自定义模块的使用方法详解
Sep 14 Javascript
浅谈React中组件逻辑复用的那些事儿
May 21 Javascript
jQuery实现本地存储
Dec 22 jQuery
vue数据字典取键值项目的字典问题
Apr 12 Vue.js
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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
PHP简单获取多个checkbox值的方法
2016/06/13 PHP
如何在PHP环境中使用ProtoBuf数据格式
2020/06/19 PHP
document.documentElement和document.body区别介绍
2013/09/16 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
Python解惑之整数比较详解
2017/04/24 Python
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
Python如何调用外部系统命令
2019/08/07 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
2020/06/29 Python
Python安装Bs4的多种方法
2020/11/28 Python
Python常用断言函数实例汇总
2020/11/30 Python
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
JOSEPH官网:英国奢侈时尚品牌
2018/01/31 全球购物
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
办公室前台岗位职责
2014/01/04 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
秋天的图画教学反思
2014/05/01 职场文书
十八大演讲稿
2014/05/22 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
承诺书范本
2015/01/21 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书