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 相关文章推荐
Google Map Api和GOOGLE Search Api整合实现代码
Jul 18 Javascript
基于jquery的表头固定的若干方法
Jan 27 Javascript
js 通用javascript函数库整理
Aug 14 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
May 11 Javascript
jquery实现预览提交的表单代码分享
May 21 Javascript
javascript使用正则表达式实现去掉空格之后的字符
Feb 15 Javascript
学习JavaScript事件流和事件处理程序
Jan 25 Javascript
JavaScript仿微信打飞机游戏
Jul 05 Javascript
解决ionic和angular上拉加载的问题
Aug 03 Javascript
Vue Echarts实现可视化世界地图代码实例
May 07 Javascript
在vscode 中设置 vue模板内容的方法
Sep 02 Javascript
详解webpack的clean-webpack-plugin插件报错
Oct 16 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
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
ECMAScript 基础知识
2007/06/29 Javascript
一些技巧性实用js代码小结
2009/10/14 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
JavaScript获取多个数组的交集简单实例
2013/11/11 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
js实现增加数字显示的环形进度条效果
2017/02/05 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
Python基类函数的重载与调用实例分析
2015/01/12 Python
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Python使用正则表达式抓取网页图片的方法示例
2017/04/21 Python
python入门教程 python入门神图一张
2018/03/05 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
python yield关键词案例测试
2019/10/15 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
CSS3中currentColor关键字的妙用
2016/02/27 HTML / CSS
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
软件缺陷的分类都有哪些
2014/08/22 面试题
主要的Ajax框架都有什么
2013/11/14 面试题
团日活动总结书格式
2014/05/08 职场文书
小学教师师德师风个人整改措施
2014/09/18 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL