最近在学习node.js,参照《Node入门》这本书写到最后一个本地图片上传的时候出现一些问题,运行的时候老是报错
Error: ENOENT: no such file or directory, rename 'C:UsersADMINI~1AppDataLocalTempupload_9cb0b2d8ce4ef6562c00d5
a874de0f97' -> '/tmp/test.png'
在百度上搜索解决办法,大多数说是路径不正确。
就是说fs.renameSync(files.upload.path, "/tmp/test.png")的"/tmp/test.png"不正确
于是我将行对路径改为绝对路径,问题还是没有解决,于是我有把路径改为了硬盘中的路径(需加转义符),这时出现了新的报错信息:
上传Error: EXDEV: cross-device link not permitted, rename 'C:UsersADMINI~1AppDataLocalTempupload_ab5d945e3b36668bc
100d7e035750d77' -> 'D:Program Files odejs mp est.png'
意思是说不允许跨磁盘命名文件,就是说不能把C盘的文件重命名到D盘。然后我在C盘新建一个tmp文件,将fs.renameSync(files.upload.path, "/tmp/test.png")改成C盘下的路径,问题得到了解决。
formidable的默认保存路径是:“C:UsersAdministratorAppDataLocalTemp”,但是这并不是我想要的,没有人喜欢把文件保存到C盘。
于是我在文挡中找到了修改formidable存储路径的方法:
var form = new formidable.IncomingForm();
form.uploadDir = "/nodeTest/tmp"; //存储路径
然后完美解决问题