[node.js] fs.renameSync()报错
程序员文章站
2022-04-14 17:08:12
初学node.js,跟着node入门,操作了一遍。在最后一步,上传图片并显示时遇到报错 根据报错信息,查找到相应的代码, 首先想到的是代码中是相对路径,导致不能查找到文件所在的位置,于是将路径补全 还是同样的报错 仔细观察后发现在路径名中可能存在的左右反斜杠的问题。即在windows中路径名间隔符为 ......
初学node.js,跟着,操作了一遍。在最后一步,上传图片并显示时遇到报错
fs.js:115 throw err; ^ error: enoent: no such file or directory, rename 'c:\users\catcher\appdata\local\temp\upload_16f7bede547980c767e1e031a3720f67' -> '/tmp/test.png' at object.renamesync (fs.js:594:3) at c:\ideaprojects\nodejs\requesthandlers.js:34:8 at incomingform.<anonymous> (c:\ideaprojects\nodejs\node_modules\formidable\lib\incoming_form.js:107:9) at incomingform.emit (events.js:182:13) at incomingform._maybeend (c:\ideaprojects\nodejs\node_modules\formidable\lib\incoming_form.js:557:8) at c:\ideaprojects\nodejs\node_modules\formidable\lib\incoming_form.js:238:12 at writestream.<anonymous> (c:\ideaprojects\nodejs\node_modules\formidable\lib\file.js:79:5) at object.oncewrapper (events.js:273:13) at writestream.emit (events.js:182:13) at finishmaybe (_stream_writable.js:641:14)
根据报错信息,查找到相应的代码,
fs.renamesync(files.upload.path, "/tmp/test.png");
首先想到的是代码中是相对路径,导致不能查找到文件所在的位置,于是将路径补全
fs.renamesync(files.upload.path,"c:/ideaprojects/nodejs/tmp/test.png");
还是同样的报错
error: enoent: no such file or directory, rename 'c:\users\catcher\appdata\local\temp\upload_cb107f6decde929aff2b86f5bfb3a330' -> 'c:/ideaprojects/nodejs/tmp/test.png'
仔细观察后发现在路径名中可能存在的左右反斜杠的问题。即在windows中路径名间隔符为右反斜杠'\',而在linux和mac os中都是左反斜杠'/'。于是修改代码为
fs.renamesync(files.upload.path,"c:\ideaprojects\nodejs\tmp\test.png");
依然报错
error: enoent: no such file or directory, rename 'c:\users\catcher\appdata\local\temp\upload_5b3fdf35fbb17a8579b5c2245f070543' -> 'c:ideaprojects odejs mp est.png'
问题在于右反斜杠是转义字符,所以路径名称应该为
fs.renamesync(files.upload.path,"c:\\ideaprojects\\nodejs\\tmp\\test.png");
遗憾的是依然报错,
error: enoent: no such file or directory, rename 'c:\users\catcher\appdata\local\temp\upload_d3cceb8f8c01ae2a796d1f356e91ae0f' -> 'c:\ideaprojects\nodejs\tmp\test.png'
不过显示的路径算是对了。
再次阅读报错信息后 no such file or directory ,会不会是文件夹tmp需要手动创建?(没错,我以为该方法会自动创建不存在的文件夹,所以在一开始我还尝试通过去查找tmp文件夹)自己创建文件夹tmp之后,成功上传图片并预览。
而之前反复改动的文件路径,以下三种方式亲测可用:
fs.renamesync(files.upload.path, "./tmp/test.png"); //注意点号 fs.renamesync(files.upload.path, "c:\\ideaprojects\\nodejs\\tmp\\test.png"); fs.renamesync(files.upload.path, "c:/ideaprojects/nodejs/tmp/test.png");
附:在网上查询资料,提到fs.renamesync() 不允许跨分区移动文件。解决办法如下:
1 var fs = require('fs'); 2 //var util = require('util'); 3 var is = fs.createreadstream('source_file'); 4 var os = fs.createwritestream('destination_file'); 5 is.pipe(os); 6 is.on('end',function() { 7 fs.unlinksync('source_file'); 8 }); 9 /* node.js 0.6 and earlier you can use util.pump: 10 util.pump(is, os, function() { 11 fs.unlinksync('source_file'); 12 }); 13 */
推荐阅读
-
深入理解node.js之path模块
-
centos下编译安装mysql报错解决方案
-
探寻PHP脚本不报错的原因
-
python编程排除163邮箱发送邮件报错(AttributeError: ‘tuple‘ object has no attribute ‘encode‘)
-
sql无效字符 执行sql语句报错解决方案
-
Android扫描二维码时出现用户禁止权限报错问题解决办法
-
IOS真机运行带有Notification Content target的时候证书报错This application or a bundle it contains has the same bun
-
基于windows下pip安装python模块时报错总结
-
Node.js系列之安装配置与基本使用(1)
-
debian5安装node.js步骤图解