node.js-上传文件至阿里云oss
- 电脑硬件
- 2025-08-15 15:33:02

deploy.js
const fs = require('fs') const path = require('path') const util = require('util') const OSS = require('ali-oss') /* 因为, 在Node.js中,许多核心模块的函数都是采用回调函数的形式进行异步操作的,即在操作完成后调用回调函数来处理结果。 但是,使用回调函数的编码风格可能会导致回调地狱(callback hell)的问题,使代码难以阅读和维护。 所以, 为了解决这个问题,Node.js提供了util.promisify方法, 它可以将回调风格的函数转换为返回Promise的函数,通过这种方式,可以使用async/await或.then()链式调用等方式来处理异步操作,使代码更加清晰和易于理解。 这两句代码的作用是:将Node.js中的回调风格的函数fs.readdir 和 fs.stat转换为基于Promise的函数, 这里,util.promisify被用来转换fs.readdir和fs.stat这两个具有回调函数的函数, 转换后,promisifyReaddir和promisifyStat就变成了可以返回Promise的函数,可以使用await或.then()来处理它们的异步结果。 */ const promisifyReaddir = util.promisify(fs.readdir) const promisifyStat = util.promisify(fs.stat) // 阿里云的oss配置 const client = new OSS({ region: 'oss-dnfdnfdnf', accessKeyId: 'Even-Dnf-dnf', accessKeySecret: 'Even-dnf-dnf-DNF', bucket: 'orange-dnf' }) /* (__dirname):node自带参数,返回的是当前文件所在目录 path.resolve():将当前文件所在目录(__dirname)与相对路径'./dist'拼接起来, 得到一个绝对路径,表示要上传的本地文件夹的路径 */ const publicPath = path.resolve(__dirname, './dist') // 异步函数run,它递归遍历指定文件夹中的所有文件和文件夹,并将文件上传到阿里云OSS async function run(proPath = '') { /* (fs.readdir):读取,指定路径下的文件和文件夹,返回一个包含文件和文件夹名称的数组, ${publicPath}${proPath}:表示要读取的文件夹路径 */ const dir = await promisifyReaddir(`${publicPath}${proPath}`) // 开始一个循环,遍历文件夹dir中的每个项 for (let i = 0; i < dir.length; i++) { // (fs.stat):获取当前项的状态信息,返回一个包含文件或文件夹的详细信息的对象 const stat = await promisifyStat(path.resolve(`${publicPath}${proPath}`, dir[i])) // 这个if...else,判断当前项是文件还是文件夹 if (stat.isFile()) { // 如果当前项是文件,创建一个可读流(fs.createReadStream)来读取文件内容,将文件内容存储在fileStream变量中 const fileStream = fs.createReadStream(path.resolve(`${publicPath}${proPath}`, dir[i])) // 打印出正在上传的文件的路径 console.log(`上传文件: ${proPath}/${dir[i]}`) /* 使用OSS客户端的putStream方法,将文件流上传到阿里云OSS中的指定路径 proPath:文件在文件夹中的相对路径,dir[i]表示文件名,fileStream表示文件内容流 */ const result = await client.putStream(`${proPath}/${dir[i]}`, fileStream) } else if (stat.isDirectory()) { // 如果,当前项是文件夹,递归调用run函数,传递当前文件夹的路径,以处理嵌套的文件夹结构 await run(`${proPath}/${dir[i]}`) } } } run()node.js-上传文件至阿里云oss由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“node.js-上传文件至阿里云oss”