解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted)

本文主要是介绍解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在写一个文件上传的功能时候,调用fs.renameSync方法错误

出错 代码所在如下:

 1 function upload(response,request){
 2     console.log("upload called");
 3     var form = new formidable.IncomingForm();
 4     console.log("about to parse");
 5     form.parse(request, function(error, fields, files) {
 6         console.log("parsing done");
 7         fs.renameSync(files.upload.path, "./tmp/test.jpg");
 8         response.writeHead(200, {"Content-Type": "text/html"});
 9         response.write("received image:<br/>");
10         response.write("<img src='/show' />");
11             response.end();
12     });
13 }

大致分析后,预计是因为 跨磁盘分区移动 或操作文件会有权限问题。

下面提供两种解决办法:

方法一:

主要利用fs的createReadStream、createWriteSream和unlinkSync方法

具体代码如下:

 1 function upload(response,request){
 2     console.log("upload called");
 3     var form = new formidable.IncomingForm();
 4     console.log("about to parse");
 5     form.parse(request, function(error, fields, files) {
 6         console.log("parsing done"); 7 //      fs.renameSync(files.upload.path, "./tmp/test.jpg");
 8         var readStream=fs.createReadStream(files.upload.path);
 9         var writeStream=fs.createWriteStream("./tmp/test.jpg");
10         readStream.pipe(writeStream);
11         readStream.on('end',function(){
12             fs.unlinkSync(files.upload.path);
13         });14         response.writeHead(200, {"Content-Type": "text/html"});
15         response.write("received image:<br/>");
16         response.write("<img src='/show' />");
17         response.end();
18     });
19 }

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' 即可(写一个临时路径)

 1 function upload(response,request){
 2     console.log("upload called");
 3     var form = new formidable.IncomingForm();
 4     form.uploadDir='tmp';
 5 
 6     console.log("about to parse");
 7     form.parse(request, function(error, fields, files) {
 8         console.log("parsing done");
 9         fs.renameSync(files.upload.path, "./tmp/test.jpg");
10         response.writeHead(200, {"Content-Type": "text/html"});
11         response.write("received image:<br/>");
12         response.write("<img src='/show' />");
13         response.end();
14     });
15 }
16

这篇关于解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133038

相关文章

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

Java报NoClassDefFoundError异常的原因及解决

《Java报NoClassDefFoundError异常的原因及解决》在Java开发过程中,java.lang.NoClassDefFoundError是一个令人头疼的运行时错误,本文将深入探讨这一问... 目录一、问题分析二、报错原因三、解决思路四、常见场景及原因五、深入解决思路六、预http://www