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系列(17):面向对象编程之概论详细介绍
Mar 04 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
Jan 08 Javascript
jQuery中inArray方法注意事项分析
Jan 25 Javascript
AngularJS 中的事件详解
Jul 28 Javascript
jQuery实现获取元素索引值index的方法
Sep 18 Javascript
D3.js实现散点图和气泡图的方法详解
Sep 21 Javascript
JavaScript文件的同步和异步加载的实现代码
Aug 19 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
Nov 30 Javascript
VueJs监听window.resize方法示例
Jan 17 Javascript
three.js实现圆柱体
Dec 30 Javascript
node.JS事件机制与events事件模块的使用方法详解
Feb 06 Javascript
Element Rate 评分的使用方法
Jul 27 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
用PHP和ACCESS写聊天室(六)
2006/10/09 PHP
PHP 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
使用PHP编写的SVN类
2013/07/18 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
php生成无限栏目树
2017/03/16 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
jquery解析xml字符串示例分享
2014/03/25 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
2021/01/29 Javascript
Python生成pdf文件的方法
2014/08/04 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
Django中F函数的使用示例代码详解
2020/07/06 Python
团日活动总结报告
2014/06/25 职场文书
婚礼答谢词范文
2015/09/29 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
Nginx的基本概念和原理
2022/03/21 Servers