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 相关文章推荐
js捕获鼠标右键菜单中的粘帖事件实现代码
Apr 01 Javascript
window.open打开页面居中显示的示例代码
Dec 27 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
Dec 10 Javascript
Bootstrap按钮组件详解
Apr 26 Javascript
原生 JS Ajax,GET和POST 请求实例代码
Jun 08 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
Jan 20 Javascript
JS设置时间无效问题的解决办法
Feb 18 Javascript
基于复选框demo(分享)
Sep 27 Javascript
angularJs中$http获取后台数据的实例讲解
Aug 08 Javascript
在微信小程序中渲染HTML内容的方法示例
Sep 28 Javascript
vue封装一个简单的div框选时间的组件的方法
Jan 06 Javascript
vue结合element-ui使用示例
Jan 24 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
Discuz 模板引擎的封装类代码
2008/07/18 PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
PHP操作数组相关函数
2011/02/03 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
js调用css属性写法
2013/09/21 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
上传图片js判断图片尺寸和格式兼容IE
2014/09/01 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
浅析Javascript ES6新增值比较函数Object.is
2016/08/24 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
Vue单页及多页应用全局配置404页面实践记录
2018/05/22 Javascript
js中let能否完全替代IIFE
2019/06/15 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
python正则表达式re模块详解
2014/06/25 Python
python常见数制转换实例分析
2015/05/09 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
Python更新所有已安装包的操作
2020/02/13 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
自荐信结尾
2013/10/27 职场文书
活动倡议书范文
2014/05/13 职场文书
销售员岗位职责
2015/02/10 职场文书
网吧管理制度范本
2015/08/05 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
python中sys模块的介绍与实例
2021/04/17 Python