nodejs 上传文件至阿里云oss,阿里云oss文件上传
墨初 知识笔记 108阅读
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它递归遍历指定文件夹中的所有文件和文件夹并将文件上传到阿里云OSSasync 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()

标签: