当前位置: 首页 > news >正文

node.js - 上传文件至阿里云oss

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

deploy.js const fs require(fs) const path require(path) const util require(util) const OSS require(ali-oss)/*因为&#xff0c;在Node.js中&#xff0c;许多核心模块的函数都是采用回调函数的形式进行异步操作的&#xff0c;即在操作完成后调用回调函数来处理结果。…...

xxl-job项目集成实战,全自动项目集成,可以直接使用到项目中

如果你看官方文档&#xff0c;在研究透&#xff0c;至少也得几天时间&#xff0c;如果你直接看我的文档&#xff0c;快速用到项目中&#xff0c;也就10分钟就搞好了。 xxl-job功能确实很强大&#xff0c;而且使用的人比较多&#xff0c;既然在使用xxl-job&#xff0c;那肯定是…...

Qt生成PDF报告

文章目录 一、示意图二、实现部分代码总结 一、示意图 二、实现部分代码 //! 生成测试报告 void MainWindow::createPdf(QString filename, _pdf_msg_& msg, const QMap<QString, int>& ok, const QMap<QString, int>& err) {//QDir dir;if(!dir.exis…...

Jenkins 安装全攻略:从入门到精通

目录 一&#xff1a;安装文件夹准备 1.打开&#xff0c;/home/admin目录 2.新建三个文件夹 二&#xff1a;安装tomcat 1.打开tomcat目录进行tomcat安装 2.解压tomcat文件 3.开放端口号 4.启动tomcat 5.浏览器访问tomcat 三&#xff1a;安装Maven 1.打开maven目录进行…...

迎重阳,话养老:平安养老险如何助力国民“养老梦”?

10月23日&#xff0c;我们将迎来传统节日重阳节&#xff0c;又称敬老节&#xff0c;自古就有祭祖、登高、赏菊三大风俗&#xff0c;流传至今&#xff0c;已成为人们孝老敬老的重要节日。 随着老龄化日益加深&#xff0c;在“敬老”的同时如何“备老”成为人民群众长期热议的话题…...

微信小程序获取用户信息

个人博客 微信小程序获取用户信息 个人微信公众号&#xff0c;求关注&#xff0c;求收藏&#xff0c;求指错。 文章概叙 本文主要讲的是小程序获取用户信息的&#xff0c;更新测试时间是2023-10-25 更改原因 首先&#xff0c;官网上的解释是这样的&#xff0c;为了安全合…...

Mysql 索引原理和优化方式

一、索引原理 什么是索引 索引是存储引擎用于快速找到记录的一种数据结构。可以联想到字典中的目录。 索引的分类 &#xff08;1&#xff09; Hash 索引 Hash 索引是比较常见的一种索引&#xff0c;他的单条记录查询的效率很高&#xff0c;时间复杂度为1。但是&#xff0c…...

Ubuntu安装VM TOOLS解决虚拟机无法和WINDOWS粘贴复制问题

1&#xff1a;首先使用VMware Workstation安装一个Ubuntu的系统。 2&#xff1a;现在已经不建议安装VM TOOLS。建议安装OPEN-VM-TOOLS。 3&#xff1a;进入系统使用下面的命令安装。 sudo apt install open-vm-tools 4&#xff1a;提示下面错误&#xff0c;Package open-vm…...

【Docker】Docker Swarm介绍与环境搭建

为什么不建议在生产环境中使用Docker Compose 多机器如何管理&#xff1f;如何跨机器做scale横向扩展&#xff1f;容器失败退出时如何新建容器确保服务正常运行&#xff1f;如何确保零宕机时间&#xff1f;如何管理密码&#xff0c;Key等敏感数据&#xff1f; Docker Swarm介…...

国产CAN总线收发芯片DP1042 兼容替换TJA1042

说明 1 简述 DP1042是一款应用于 CAN 协议控制器和物理总线之间的接口芯片&#xff0c;可应用于卡车、公交、小汽车、工业控制等领域&#xff0c;支持 5Mbps CAN FD 灵活数据速率&#xff0c;具有在总线与 CAN 协议控制器之间进行差分信号传输的能力&#xff0c;完全兼容“ISO…...

[架构之路-243]:目标系统 - 纵向分层 - 架构是表面轮廓、内部骨架、未来蓝图,企业组织架构、信息系统架构、软件架构、应用程序就架构

目录 一、什么是架构 1.1 架构是表面轮廓 1.2 架构是内部骨架 1.3 架构是蓝图&#xff0c;是愿景 1.4 架构是数据流、控制流、管理流、同步流 1.5 数据、控制、同步、管理的比较 二、架构的层级 2.1 企业组织架构 2.2 企业系统架构 2.2 信息系统架构 2.3 软件架构 …...

【接口技术】定时计数器习题

1&#xff1a;8253芯片有______个端口地址。 【可选】 2 3 4 6 解答&#xff1a;4 2&#xff1a;8253芯片有______种工作方式。 【可选】 3 4 5 6 解答&#xff1a;6 3&#xff1a; 8253芯片内部有完全独立的______。 【可选】 6个16位计数通道 3个16位计数通道 6个8位计…...

DC电源模块的的散热结构合理布局

BOSHIDA DC电源模块的的散热结构合理布局 DC电源模块在工业控制、通讯、汽车电子等领域广泛应用。然而&#xff0c;随着功率密度不断提高&#xff0c;DC电源模块产生的热量也越来越大&#xff0c;散热问题变得越来越突出。为了保障电路的稳定性和可靠性&#xff0c;必须采取合…...

Fedora Linux 38下安装音频与视频的解码器和播放器

Fedora Linux 38 操作系统安装好后&#xff0c;默认是没有音频与视频的解码器的&#xff0c;音频与视频的播放体验非常差劲。但是第三方的软件源中有解码器和播放器的软件&#xff0c;需要我们自己手动安装。、 连接互联网&#xff0c;打开Shell命令行&#xff1a; 1. sudo d…...

边缘计算:云计算的延伸

云计算已经存在多年&#xff0c;并已被证明对大大小小的企业都有好处&#xff1b;然而&#xff0c;直到最近边缘计算才变得如此重要。它是指发生在网络边缘的一种数据处理&#xff0c;更接近数据的来源地。 这将有助于提高效率并减少延迟以及设备和云之间的数据传输成本。边缘…...

【经验分享】在Kylin桌面版操作系统中配置openGauss的ODBC数据源

引言 openGauss是一款开源的关系型数据库管理系统&#xff0c;它提供了强大的功能和性能&#xff0c;可以满足各种企业级应用的需求。与此同时&#xff0c;ODBC&#xff08;Open Database Connectivity&#xff09;是一个标准的数据库访问接口&#xff0c;它允许应用程序通过统…...

WSL——ubuntu中anaconda换源(conda、pip)

1、conda 打开Ubuntu&#xff0c;输入下列命令。 conda config --set show_channel_urls yes 在文件管理器地址栏&#xff0c;输入&#xff1a;\\wsl$。打开Ubuntu根路径&#xff0c;其中显示了.condarc文件。 以文本形式打开&#xff0c;并输入要换的源&#xff0c;保存即可。…...

IP地址在网络安全中的关键作用

IP地址&#xff08;Internet Protocol Address&#xff09;是互联网世界中的重要标识符&#xff0c;它在网络安全领域发挥着至关重要的作用。这些地址不仅帮助设备在网络上找到彼此&#xff0c;还在多个方面有助于维护网络的完整性、机密性和可用性。本文将探讨IP地址在网络安全…...

Android.mk 中覆盖应用包名

项目场景&#xff1a; 一般来讲应用包名都是配置在 AndroidManifest.xml 中的&#xff0c;但遇到特殊情况&#xff0c;需要修改源码中应用包名 通常都会先去改 AndroidManifest.xml package 但改为后编译发现一顿错误&#xff0c;原因是 java 类中已经指定了 R 文件包名&…...

如何最有效地使用ChatGPT:提问技巧与策略

前言 在如今信息技术高速发展的时代&#xff0c;像ChatGPT这样的大型自然语言处理模型为我们提供了一个强大的工具&#xff0c;以获取各种信息和答案。然而&#xff0c;要充分利用这一工具&#xff0c;您需要掌握一些提问技巧与策略&#xff0c;以确保获得最准确和有用的回答。…...

【JAVA学习笔记】40 - 抽象类、模版设计模式(抽象类的使用)

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/abstract_ 一、抽象类的引入 很多时候在创建类的时候有一个父类&#xff0c;比如animal类&#xff0c;他的子类会有各种方法&#xff0c;为了复用需要进行方法的重写&…...

如何通过在线培训考试系统进行远程教育

随着互联网技术的不断发展&#xff0c;远程教育正在成为一种新型的学习方式&#xff0c;它使学生能够在任何地点、任何时间通过在线培训考试系统接受教育。 利用在线培训考试系统进行远程教育具有很大的灵活性。学生可以根据自己的时间和需求自由选择课程&#xff0c;无需受制…...

2021-arXiv-The Power of Scale for Parameter-Efficient Prompt Tuning

2021-arXiv-The Power of Scale for Parameter-Efficient Prompt Tuning Paper: https://arxiv.org/abs/2104.08691 Code: https://github.com/google-research/ text-to-text-transfer-transformer/ blob/main/released_checkpoints.md# lm-adapted-t511lm100k 在这项工作中&…...

计算机视觉与深度学习 | 非线性优化理论:图优化、高斯牛顿法和列文伯格-马夸尔特算法

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 计算机视觉与深度学习 | SLAM国内外研究现状 计算机视觉与深度学习 | 视…...

一文说尽零售数据分析指标体系

零售的本质业务模式是通过在各种渠道上吸引客户来购买我们的商品来实现盈利&#xff0c;其实就是客户-渠道-商品&#xff0c;也就是我们常说的“人、场、货”&#xff0c;除此之外还有供应链、财务等起到重要的辅助作用。因此如果要构建起系统化的零售数据分析指标体系&#xf…...

AT2659一款卫星导航低噪声放大器芯片(LNA)

产品介绍 AT2659 是一款专门针对中国 BDS&#xff08;北斗卫星导航系统&#xff09;&#xff0c;美国的 GPS&#xff0c;俄罗斯的 GLONASS 和欧盟的 GALILEO 导航系统应用而设计的高增益、低噪声系数射频放大器。 AT2659 具有 23dB 高增益和 0.71dB 的低噪声系数。芯片支持 …...

GoLong的学习之路(二)语法之基本数据类型

书接上回&#xff1a;我在GoLong的学习之路&#xff08;一&#xff09;中在常量最后说了iota的作用。今天这里我在介绍一下我学习Go语言中基本数据类型。 文章目录 Go中的基本数据类型整型特殊整型数字字面语法 浮点型复数布尔值字符串字符串转义符多行字符字符串的常用操作&am…...

网关概念及java项目中用使用网关场景

网关&#xff08;Gateway&#xff09;是一个在网络系统中起到入口和出口的作用的组件或服务。它位于客户端和服务器之间&#xff0c;负责处理进出网络的流量&#xff0c;实现一些重要的功能&#xff0c;如路由、安全认证、协议转换等。 网关在网络架构中扮演了多种角色&#x…...

网页禁止右键 禁止F12 JavaScript禁止F12 禁止右键菜单 包含 js、Jquery、Vue

网页禁止右键 禁止F12 Jquery禁止F12 禁止右键菜单 包含 Jquery、Vue 网页禁止右键 禁止F12 JavaScript禁止F12 禁止右键菜单 jsJavaScript 中Jquery 中Vue 中 这样设置通常是出于安全性或保护内容的目的&#xff0c;不想让别人看到源代码等信息 网页禁止右键 禁止F12 JavaScr…...

Linux系统编程07

线程 为什么有了进程还需要线程 进程切换的时候会花费很大的代价 &#xff08;1&#xff09;上下文切换&#xff0c;CPU寄存器需要切换 &#xff08;2&#xff09;虚拟地址和物理地址的映射需要切换 进程间通信麻烦 线程是轻量级的进程 &#xff08;1&#xff09;线程是一个正…...