找回密码
 会员注册
查看: 2|回复: 0

j获取文件上传的绝对路径(前端上传文件获取文件路径)

[复制链接]

2

主题

0

回帖

7

积分

新手上路

积分
7
发表于 2024-12-31 01:43:06 | 显示全部楼层 |阅读模式
前言 之前在做webpack配置时候多次用到路径相关内容。最近在写项目的时候,有一个文件需要上传到阿里云oss的功能,同时本地服务器也需要保留一个文件备份。多次用到了文件路径相关内容以及Node核心API的path模块,所以系统的学习了一下,整理了这篇文章。 node中的路径分类 node中的路径大致分5类,dirname,filename,process.cwd(),./,../,其中dirname,filename,process.cwd()绝对路径 通过代码对每个分类进行说明: 文件目录结构如下:代码pra/ - node核心API/ - fs.js - path.jspath.js中的代码const path = require(path); console.log(__dirname); console.log(__filename); console.log(process.cwd()); console.log(path.resolve(./));在代码pra目录下运行命令 node node核心API/path.js,我们可以看到结果如下:/koala/Desktop/程序员成长指北/代码pra/node核心API /koala/Desktop/程序员成长指北/代码pra/node核心API/path.js /koala/Desktop/程序员成长指北/代码pra /koala/Desktop/程序员成长指北/代码pra然后我们有可以在node核心API目录下运行这个文件,node path.js,运行结果如下:/koala/Desktop/程序员成长指北/代码pra/node核心API /koala/Desktop/程序员成长指北/代码pra/node核心API/path.js /koala/Desktop/程序员成长指北/代码pra/node核心API /koala/Desktop/程序员成长指北/代码pra/node核心API对比输出结果,暂时得到的结论是__dirname: 总是返回被执行的 js 所在文件夹的绝对路径__filename: 总是返回被执行的 js 的绝对路径process.cwd(): 总是返回运行 node 命令时所在的文件夹的绝对路径./: 跟 process.cwd() 一样,返回 node 命令时所在的文件夹的绝对路径我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。 为什么说上面是暂时得到的结论,因为是有错误的,再看一段代码:我们在path.js中加上这句代码exports.A = 1;之前直接通过readFile读取文件路径报错,fs.readFile(./path.js,function(err,data){ });现在在刚才报错的fs.js里面加这两句代码看看:const test = require(./path.js); console.log(test)在代码pra/目录下运行node node核心API/fs.js,最后查看结果,说明是可以访问到的:{ A: 1 }那么关于 ./正确的结论是: 在 require()中使用是跟__dirname 的效果相同,不会因为启动脚本的目录不一样而改变,在其他情况下跟 process.cwd() 效果相同,是相对于启动脚本所在目录的路径。 路径知识总结:__dirname:获得当前执行文件所在目录的完整目录名__filename:获得当前执行文件的带有完整绝对路径的文件名process.cwd():获得当前执行node命令时候的文件夹目录名./:不使用require时候,./与process.cwd()一样,使用require时候,与__dirname一样只有在 require() 时才使用相对路径(./, ../) 的写法,其他地方一律使用绝对路径,如下:// 当前目录下 path.dirname(__filename) + /path.js; // 相邻目录下 path.resolve(__dirname, ../regx/regx.js);path 前面讲解了路径的相关比较,接下来单独聊聊path这个模块,这个模块在很多地方比较常用,所以,对于我们来说,掌握他,对我们以后的发展更有利,不用每次看webpack的配置文件还要去查询一下这个api是干什么用的,很影响我们的效率 这是api官网地址:https://nodejs.org/api/path.html 个人认为官网中的api没有必要都掌握,下面会对一些常用的api进行讲解,我经常用到的,或者作为一个前端开发工程师在webpack等工程配置的时候经常用到的。 path.normalize 举例说明const path = require(path); console.log(path.normalize(/koala/Desktop//程序员成长指北//代码pra/..));规范后的结果/koala/Desktop/程序员成长指北/代码pra作用总结 规范化路径,把不规范的路径规范化。 path.join 举例说明:const path = require(path); console.log(path.join(src, task.js)); const path = require(path); console.log(path.join());转化后的结果src/task.js .作用总结 path.join([...paths])传入的参数是字符串的路径片段,可以是一个,也可以是多个返回的是一个拼接好的路径,但是根据平台的不同,他会对路径进行不同的规范化,举个例子,Unix系统是/,Windows系统是,那么你在两个系统下看到的返回结果就不一样。如果返回的路径字符串长度为零,那么他会返回一个.,代表当前的文件夹。如果传入的参数中有不是字符串的,那就直接会报错path.parse 举例说明const path = require(path); console.log(path.parse(/koala/Desktop/程序员成长指北/代码pra/node核心API));运行结果{ root: /, dir: /koala/Desktop/程序员成长指北/代码pra, base: node核心API, ext: , name: node核心API }作用总结 他返回的是一个对象,那么我们来把这么几个名词熟悉一下:root:代表根目录dir:代表文件所在的文件夹base:代表整一个文件name:代表文件名ext: 代表文件的后缀名path.basename 举例说明const path = require(path); console.log(path.basename(/koala/Desktop/程序员成长指北/代码pra/node核心API)); console.log(path.basename(/koala/Desktop/程序员成长指北/代码pra/node核心API/path.js, .js));运行结果 看了上面代码的例子,我想应该知道了basename结果,嘿嘿。node核心API path作用总结 basename接收两个参数,第一个是path,第二个是ext(可选参数),当输入第二个参数的时候,打印结果不出现后缀名 path.dirname 举例说明const path = require(path); console.log(path.dirname(/koala/Desktop/程序员成长指北/代码pra/node核心API));运行结果/koala/Desktop/程序员成长指北/代码pra作用总结 返回文件的目录完整地址 path.extname 举例说明const path = require(path); path.extname(index.html); path.extname(index.coffee.md); path.extname(index.); path.extname(index); path.extname(.index);运行结果.html .md .作用总结 返回的是后缀名,但是最后两种情况返回,大家注意一下。 path.resolve 举例说明const path = require(path); console.log(path.resolve(/foo/bar, /bar/faa, .., a/../c));输出结果/bar/c作用总结 path.resolve([...paths]) path.resolve就相当于是shell下面的cd操作,从左到右运行一遍cd path命令,最终获取的绝对路径/文件名,这个接口所返回的结果了。但是resolve操作和cd操作还是有区别的,resolve的路径可以没有,而且最后进入的可以是文件。具体cd步骤如下cd /foo/bar/ //这是第一步, 现在的位置是/foo/bar/ cd /bar/faa //这是第二步,这里和第一步有区别,他是从/进入的,也就时候根目录,现在的位置是/bar/faa cd .. //第三步,从faa退出来,现在的位置是 /bar cd a/../c //第四步,进入a,然后在推出,在进入c,最后位置是/bar/cpath.relative 举例说明const path = require(path); console.log(path.relative(/data/orandea/test/aaa, /data/orandea/impl/bbb)); console.log(path.relative(/data/demo, /data/demo)); console.log(path.relative(/data/demo, ));运行结果../../impl/bbb "" ../../koala/Desktop/程序员成长指北/代码pra/node核心API作用总结 path.relative(from, to) 描述:从from路径,到to路径的相对路径。 边界:如果from、to指向同个路径,那么,返回空字符串。如果from、to中任一者为空,那么,返回当前工作路径。总结 本篇文章关于路径的知识就说到这里,基础很重要的,既能节约开发时间,又能减少报错。 原文链接:https://mp.weixin.qq.com/s/CPYa7YjQDJGYWzKwTox5Rg作者:程序员成长指北  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-8 13:14 , Processed in 2.496438 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表