[node.js] fs.renameSync()报错
2019-01-21 02:39:27来源:博客园 阅读 ()
初学node.js,跟着node入门,操作了一遍。在最后一步,上传图片并显示时遇到报错
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需要手动创建?(没错,我以为该方法会自动创建不存在的文件夹,所以在一开始我还尝试通过everything去查找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() 不允许跨分区移动文件。解决办法如下:
https://stackoverflow.com/questions/4568689/how-do-i-move-file-a-to-a-different-partition-or-device-in-node-js
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 */
原文链接:https://www.cnblogs.com/readerman/p/10286971.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Node.js中环境变量process.env的一些事详解 2020-01-17
- 详解node.js进行web开发的操作方法 2019-12-14
- 使用原生node.js搭建HTTP服务器,支持MP4视频、图片传输,支 2019-08-14
- 使用node.js爬取博客园首页的博客 2019-08-14
- npm install 报错踩坑路 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash