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写的一个链表实现代码
Oct 25 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
Apr 14 Javascript
浅析js预加载/延迟加载
Sep 25 Javascript
window.open()实现post传递参数
Mar 12 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
Jan 08 Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 Javascript
jQuery的文档处理程序详解
May 10 Javascript
Angular.js 实现数字转换汉字实例代码
Jul 14 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
Dec 14 Javascript
layui框架table 数据表格的方法级渲染详解
Aug 19 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
Jul 30 Javascript
小程序最新获取用户昵称和头像的方法总结
Sep 23 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初始化对象和析构函数的简单实例
2014/03/11 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
jQuery的学习步骤
2011/02/23 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
JS实现网页烟花动画效果
2020/03/10 Javascript
ptyhon实现sitemap生成示例
2014/03/30 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
python实现词法分析器
2019/01/31 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
一些.net面试题
2014/10/06 面试题
实习生个人的自我评价
2013/12/08 职场文书
农民工创业典型事迹
2014/01/25 职场文书
家长写给老师的建议书
2014/03/13 职场文书
大学中国梦演讲稿
2014/04/23 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
公司欠款证明
2015/06/24 职场文书
结婚幸福感言
2015/08/01 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
MySQL常见优化方案汇总
2022/01/18 MySQL