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判断IE版本的代码 超管用!
Aug 09 Javascript
js实现在页面上弹出蒙板技巧简单实用
Apr 16 Javascript
JS实现倒计时和文字滚动的效果实例
Oct 29 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
Jun 04 Javascript
JavaScript对象创建模式实例汇总
Oct 03 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 Javascript
利用JavaScript如何查询某个值是否数组内
Jul 30 Javascript
jQuery实现的回车触发按钮事件功能示例
Mar 25 jQuery
Vue.js 表单控件操作小结
Mar 29 Javascript
vue代理和跨域问题的解决
Jul 18 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
Jan 09 Javascript
Vue多选列表组件深入详解
Mar 02 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
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
PHP生成随机字符串(3种方法)
2015/09/25 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
jQuery load方法用法集锦
2011/12/06 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
用Python给文本创立向量空间模型的教程
2015/04/23 Python
Python3 XML 获取雅虎天气的实现方法
2018/02/01 Python
使用python 3实现发送邮件功能
2018/06/15 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
浅谈python3中input输入的使用
2019/08/02 Python
CSS3 边框效果
2019/11/04 HTML / CSS
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
Unix/Linux开发面试题
2016/08/16 面试题
网络营销策划方案
2014/06/04 职场文书
CAD实训总结范文
2015/08/03 职场文书
银行安全保卫工作总结
2015/08/10 职场文书
详解java如何集成swagger组件
2021/06/21 Java/Android
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers