【分布式知识】分布式对象存储组件-Minio

news2024/10/26 19:35:27

文章目录

    • 什么是minio
      • 核心特点:
      • 使用场景:
      • 开发者工具:
      • 社区和支持:
    • 核心概念
      • 什么是对象存储?
      • MinIO 如何确定对对象的访问权限?
      • 我可以在存储桶内按文件夹结构组织对象吗?
      • 如何备份和恢复 MinIO 上的对象?
      • MinIO 提供哪些工具来根据访问速度和频率管理对象?
      • MinIO 如何保护对象免遭意外覆盖或删除?
        • 锁定
        • 版本控制
    • 架构解析
      • 分布式架构
      • 存储机制
      • 高可用性和扩展性
      • 兼容性
      • 安全性
      • 管理和监控
    • minio扩容
      • 扩容前的准备
      • 添加新节点
      • 扩展存储
      • 数据迁移
      • 测试和验证
      • 示例命令
        • 在新节点上安装并启动MinIO服务:
        • 更新集群配置(如果有需要):
        • 使用`mc`工具测试数据迁移:
      • 注意事项
    • 命令行
      • 基本配置
        • 设置环境变量:
      • 基本命令
        • 连接到MinIO服务器:
        • 列出所有存储桶:
        • 创建新的存储桶:
        • 删除存储桶:
        • 切换当前工作目录到指定存储桶:
      • 文件操作
        • 上传文件到存储桶:
        • 下载文件到本地:
        • 复制存储桶内的文件:
        • 删除存储桶内的文件:
      • 目录操作
        • 上传整个目录到存储桶:
        • 下载整个目录到本地:
        • 删除存储桶内的目录:
      • 更多命令
        • 列出存储桶中的所有对象:
        • 查看特定对象的信息:
        • 设置对象的元数据:
        • 获取对象的元数据:
        • 生成共享链接:
        • 启动MinIO服务器(如果安装了MinIO服务端):
    • 相关文献

什么是minio

MinIO是一个开源的对象存储服务器,它旨在提供高性能、高可扩展性的存储解决方案。以下是关于MinIO的一些详细介绍:

核心特点:

  1. 高性能:MinIO设计用于提供高速的数据访问速度,在标准硬件上也能达到非常高的吞吐量。
  2. 云原生:MinIO支持Kubernetes,并且适合在云环境中运行,特别是对于微服务架构的应用。
  3. 可扩展性:MinIO支持水平扩展,可以通过增加更多的节点来扩展存储容量和性能。
  4. API兼容性:MinIO与Amazon S3 API兼容,这使得现有的S3应用程序可以轻松迁移或与MinIO集成。
  5. 跨平台:MinIO可以在Linux、Windows和macOS等多个操作系统上运行。
  6. 安全性:MinIO支持加密、身份验证和授权等功能,确保数据的安全性。

使用场景:

  • 大数据存储:适合存储海量的数据,如日志文件、分析数据等。
  • 备份与归档:可以用来备份重要的数据,同时也支持长期的数据归档。
  • Web应用:可以作为Web应用的静态资源存储库,如图片、视频等。
  • 容器化应用:非常适合云原生应用的数据持久化需求。
  • IoT应用:可以存储从物联网设备收集的数据。

开发者工具:

  • MinIO支持多种编程语言的SDK,包括Java、Python、Go等,方便开发者快速集成MinIO到自己的应用中。
  • 它还提供了命令行界面(CLI),使得终端用户可以方便地管理和操作存储在MinIO中的对象。

社区和支持:

  • MinIO有一个活跃的开源社区,提供了丰富的文档和技术支持,帮助用户更好地理解和使用这个工具。
    由于MinIO的这些特点,它成为了许多组织和个人在构建需要高性能、可扩展存储解决方案的应用和服务时的选择。

核心概念

什么是对象存储?

对象是二进制数据,有时也称为二进制大对象 (BLOB)。Blob 可以是图像、音频文件、电子表格,甚至是二进制可执行代码。MinIO 等对象存储平台提供专用工具和功能来存储、检索和搜索 Blob 。

MinIO 对象存储使用存储桶来组织对象。存储桶类似于文件系统中的文件夹或目录,每个存储桶可以容纳任意数量的对象。MinIO 存储桶提供与 AWS S3 存储桶相同的功能。

例如,假设有一个托管网络博客的应用程序。该应用程序需要存储各种 blob,包括视频和图像等丰富的多媒体。

MinIO 通过功能支持多级嵌套目录,prefixing 以支持最动态的对象存储工作负载。

MinIO 如何确定对对象的访问权限?

MinIO 要求客户端对每个新操作执行身份验证和授权。 因此,身份和访问管理 (IAM)是 MinIO 配置的关键组件。

身份验证可验证连接客户端的身份。MinIO 要求客户端使用AWS 签名版本 4 协议进行身份验证,并支持已弃用的签名版本 2 协议。具体来说,客户端必须提供有效的访问密钥和密钥才能访问任何 S3 或 MinIO 管理 API,例如PUT、GET和DELETE操作。

然后,MinIO 检查经过身份验证的用户或客户端是否有权在部署上执行操作或使用资源。MinIO 使用基于策略的访问控制 (PBAC),其中每个策略描述一个或多个规则,这些规则概述了用户或用户组的权限。MinIO在创建策略时支持特定于 S3 的操作和条件。

默认情况下,MinIO拒绝访问用户分配或继承的策略中未明确引用的操作或资源。

MinIO 提供了访问管理功能作为软件的一部分。或者,您可以将 MinIO 配置为使用Active Directory/LDAP或OpenID/OIDC与多个外部 IAM 提供程序之一进行身份验证。

MinIO 如何保护数据安全?
MinIO 支持在驱动器上对对象进行编码(静态加密)以及在从一个位置转换到另一个位置时进行编码(传输中加密或“动态加密”)的方法。启用后,MinIO 会利用服务器端加密以加密状态写入对象。要检索和读取加密对象,用户必须具有适当的访问权限并提供对象的解密密钥。

MinIO 支持传输层安全性(TLS) 版本 1.2 和 1.3 加密对象。TLS 取代了以前使用的安全套接字层 (SSL) 方法,该方法现已弃用。由互联网工程任务组 (IETF) 维护的 TLS 标准提供了互联网通信用于支持加密、身份验证和数据完整性的标准。

验证用户和验证对象访问权限的过程称为TLS 握手。验证完成后,TLS 提供密码来加密和解密从服务器到请求客户端的信息传输。

MinIO 支持多种服务器端加密方法。

我可以在存储桶内按文件夹结构组织对象吗?

MinIO 为每个对象使用前缀方法,模仿传统文件系统的文件夹结构。前缀涉及在对象名称前面添加固定字符串。

使用前缀,您无需手动创建文件夹和子文件夹。相反,MinIO 会查找/对象名称前缀中的字符。每个字符都/表示一个新文件夹或子文件夹。

MinIO 使用对象的名称和前缀自动生成一系列用于存储对象的文件夹和子文件夹。当你在多个对象上使用相同的前缀字符串时,MinIO 会将它们识别为相似或分组的对象。

例如,名为 的对象/articles/john.doe/2022-01-02-MinIO-Object-Storage.md最终会存放在articles存储桶中标有 的文件夹中john.doe。

MinIO 对象存储可能类似于以下结构,具有三个存储桶。MinIO 会articles根据这些对象的前缀自动在存储桶中生成两个文件夹。

/ #root
/images/
   2022-01-02-MinIO-Diagram.png
   2022-01-03-MinIO-Advanced-Deployment.png
   MinIO-Logo.png
/videos/
   2022-01-04-MinIO-Interview.mp4
/articles/
   /john.doe/
      2022-01-02-MinIO-Object-Storage.md
      2022-01-02-MinIO-Object-Storage-comments.json
   /jane.doe/
      2022-01-03-MinIO-Advanced-Deployment.png
      2022-01-02-MinIO-Advanced-Deployment-comments.json
      2022-01-04-MinIO-Interview.md

MinIO 本身不限制任何特定前缀可以包含的对象数量。但是,硬件和网络条件可能会因前缀较大而对性能产生影响。

使用中等或预算有限的硬件进行部署时,应将其工作负载设计为以每个前缀 10,000 个对象为基准。根据基准测试和对实际工作负载的监控将此目标提高到硬件可以有效处理的水平。

使用高性能或企业级硬件的部署通常可以处理具有数百万个或更多对象的前缀。

MinIO SUBNET企业账户可以利用年度架构审查作为部署和维护策略的一部分,以确保依赖 MinIO 的项目的长期性能和成功。

有关限制前缀内容的好处的更深入讨论,请参阅有关优化 S3 性能的文章。

如何备份和恢复 MinIO 上的对象?

MinIO 提供两种类型的复制,用于将对象、其版本及其元数据从一个位置复制到另一个位置。您可以在存储桶级别或站点级别配置复制。

存储桶级别复制既可以作为单向、主动-被动复制(例如用于存档目的),也可以作为双向、主动-主动复制,以使两个存储桶彼此保持同步。

站点级复制功能作为双向、主动-主动复制,以使多个数据位置(例如不同的地理数据中心)彼此同步。

除了复制之外,MinIO 还提供镜像服务。 仅将实际对象复制到任何其他 S3 兼容数据存储,包括其他 MinIO 存储。但是,版本和元数据不会使用该命令备份。mc mirrormc mirror

独家访问驱动器
MinIO需要 对用于对象存储的驱动器或卷具有独占访问权限。任何其他流程、软件、脚本或人员都不得直接对提供给 MinIO 的驱动器或卷或 MinIO 放置在其上的对象或文件执行任何操作。
除非得到 MinIO 工程部门的指示,否则请勿使用脚本或工具直接修改、删除或移动所提供驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点移动到另一个驱动器或节点。此类操作很可能会导致大面积损坏和数据丢失,超出 MinIO 的修复能力。

MinIO 提供哪些工具来根据访问速度和频率管理对象?

分层规则允许将经常访问的对象存储在热存储或温存储中,这通常更昂贵但提供更好的性能。

访问频率较低的对象可以移至冷存储。冷存储通常会以较低的性能换取较低的价格。

MinIO 如何保护对象免遭意外覆盖或删除?

锁定

锁定是一种一次写入多次读取 (WORM) 机制,可防止删除或修改对象。锁定后,MinIO 会无限期地保留对象,直到有人移除锁定或锁定过期。

MinIO 提供:

  • 法律保留锁,供所有用户无限期保留

  • 对所有用户实施基于时间的限制

  • 为非特权用户制定基于时间的锁规则

版本控制

默认情况下,使用相同名称(包括前缀)写入的对象会覆盖现有的同名对象。MinIO 提供了一个配置选项来创建启用了版本控制的存储桶。 版本控制可让您访问随时间变化的唯一命名对象的各个迭代。启用后,MinIO 会将变异对象写入与原始对象不同的版本,从而允许访问原始对象和更新的已更改对象。

MinIO 存储桶上的附加配置决定了存储桶中每个对象的旧版本保留多长时间。

架构解析

MinIO的架构设计是为了实现高性能、可扩展性以及简单易用性。以下是对MinIO架构的一些关键特性的解析:

分布式架构

deploy-arc

  • 无中心化设计:MinIO采用了一种去中心化的架构,其中对象数据被分散存储在集群的不同节点上。这种设计避免了单点故障,并提高了系统的可靠性。
  • 负载均衡:MinIO可以使用Web负载均衡器或DNS轮询(DNS round-robin)来平衡请求负载,从而提高系统的整体性能。

存储机制

minio-bucket

  • Bucket和Object:在MinIO中,数据被组织成Buckets(桶),每个Bucket类似于传统文件系统中的目录。Bucket中的数据则被进一步划分为Objects(对象),每个对象都有一个唯一的键来标识。
  • 本地文件系统:每个Bucket在本地文件系统中表示为一个目录,而对象则是该目录下的文件。这种设计简化了数据的管理和存储。

高可用性和扩展性

  • 水平扩展:MinIO支持水平扩展,即通过增加更多的节点来增加存储容量和性能。这种扩展性使得MinIO能够处理大量数据和高并发请求。
  • 多租户支持:MinIO支持多租户架构,允许多个用户或服务共享相同的存储基础设施,同时保持数据隔离。

兼容性

  • S3兼容API:MinIO完全兼容Amazon S3 API,这使得现有的S3应用程序可以直接与MinIO交互,无需修改代码。

安全性

  • 认证和授权:MinIO支持多种认证机制,如IAM(Identity and Access Management)用户认证,以及通过证书或其他方式对数据进行加密传输。
  • 数据加密:支持在传输过程中和静止状态下的数据加密,以保证数据的安全性。

管理和监控

  • 命令行工具(CLI):提供了强大的命令行工具,使得用户可以方便地管理存储在MinIO中的对象。
  • API和SDKs:除了S3兼容的API之外,MinIO还提供了多种编程语言的SDK,以便开发者能够更容易地集成MinIO到他们的应用中。
  • 可视化界面:虽然MinIO本身主要是一个命令行和API驱动的服务,但它也支持通过第三方工具或插件提供图形化的管理界面。

minio扩容

MinIO的设计允许通过水平扩展来增加存储容量和提升性能。扩容通常意味着添加更多的节点到现有的MinIO集群中。以下是进行MinIO扩容的一般步骤:

扩容前的准备

  1. 评估需求:确定需要增加多少存储容量或者提高多少性能。
  2. 规划布局:根据需求确定需要添加的新节点数量以及它们将如何分配存储空间。
  3. 备份数据:在进行任何可能影响数据的操作之前,最好先备份数据。

添加新节点

  1. 安装MinIO:在新的服务器上安装MinIO。确保新服务器上的MinIO版本与现有集群版本相匹配。
  2. 配置新节点:设置新节点上的MinIO服务,包括配置端点、访问密钥和秘密密钥等信息。

扩展存储

  1. 调整存储路径:将新节点上的存储路径加入到MinIO集群中。如果是单机模式,只需确保有足够的磁盘空间;如果是分布式模式,则需要将新的磁盘或服务器加入集群。
  2. 更新集群配置:如果使用的是MinIO的分布式模式,那么需要更新集群配置来反映新的节点信息。

数据迁移

  1. 手动迁移数据:如果是在同一个数据中心内,可以通过直接复制文件的方式将数据迁移到新的存储位置。
  2. 使用工具迁移数据:可以使用mc命令行工具或者通过API调用来迁移数据。

测试和验证

  1. 测试新配置:确保所有节点都能正常工作,并且数据可以正确读写。
  2. 监控性能:检查扩容后的集群是否达到了预期的性能指标,如IOPS、吞吐量等。

示例命令

假设你要在一个已经存在的MinIO集群中添加一个新的节点,可以通过如下步骤:

在新节点上安装并启动MinIO服务:
minio server /path/to/new/data/folder --address :9000 --config-dir /etc/minio

这里--address :9000指定了监听端口,--config-dir /etc/minio指定了配置目录。

更新集群配置(如果有需要):

如果使用的是分布式模式,可能需要编辑集群配置文件,将新节点的信息添加进去。

使用mc工具测试数据迁移:
mc cp -r /path/to/local/folder miniocloud/bucket/newpath

这里miniocloud是一个预设的别名,指向你的MinIO集群。

注意事项

  • 一致性检查:扩容后,建议进行一致性检查,确保所有副本都同步并且数据完整。
  • 监控工具:使用监控工具来持续监控集群的健康状况和性能。
  • 安全性:确保新加入的节点遵循相同的安全策略,如身份验证、数据加密等。

扩容MinIO集群是一项技术要求较高的操作,尤其是在生产环境中。务必谨慎行事,并确保有详细的计划和应急措施。如果不确定如何操作,可以参考MinIO官方文档或寻求专业的技术支持。

命令行

MinIO提供了命令行界面(CLI),使得用户可以方便地执行各种对象存储相关的任务,如创建和删除存储桶(buckets)、上传和下载对象等。下面是MinIO CLI的一些常用命令及其简要说明。

基本配置

首先,你需要配置MinIO客户端以连接到你的MinIO服务器。你可以设置环境变量或者直接在命令行中指定端点、访问密钥和秘密密钥。

设置环境变量:
export MINIO_ACCESS_KEY=your_access_key
export MINIO_SECRET_KEY=your_secret_key
export MINIO_ENDPOINT=minio_server_endpoint:port

基本命令

连接到MinIO服务器:
mc alias set myminio http://minio_server_endpoint:port your_access_key your_secret_key
列出所有存储桶:
mc ls myminio
创建新的存储桶:
mc mb myminio/mybucket
删除存储桶:
mc rb myminio/mybucket
切换当前工作目录到指定存储桶:
mc cd myminio/mybucket

文件操作

上传文件到存储桶:
mc cp /path/to/local/file myminio/mybucket/remote/path
下载文件到本地:
mc cp myminio/mybucket/remote/path /path/to/local/directory
复制存储桶内的文件:
mc cp myminio/mybucket/oldpath myminio/mybucket/newpath
删除存储桶内的文件:
mc rm myminio/mybucket/path/to/object

目录操作

上传整个目录到存储桶:
mc cp -r /path/to/local/directory myminio/mybucket/remote/path
下载整个目录到本地:
mc cp -r myminio/mybucket/remote/path /path/to/local/directory
删除存储桶内的目录:
mc rm -r myminio/mybucket/path/to/directory

更多命令

列出存储桶中的所有对象:
mc ls myminio/mybucket
查看特定对象的信息:
mc stat myminio/mybucket/path/to/object
设置对象的元数据:
mc setmeta myminio/mybucket/path/to/object --header "X-Amz-Meta-Custom-Header: custom value"
获取对象的元数据:
mc getmeta myminio/mybucket/path/to/object
生成共享链接:
mc presign myminio/mybucket/path/to/object
启动MinIO服务器(如果安装了MinIO服务端):
minio server /path/to/data/folder --address :9000

以上是一些基本的MinIO CLI命令示例。通过这些命令,你可以执行大部分日常的对象存储操作。如果你需要更详细的功能介绍或者有特定的需求,建议查阅官方文档获取最新的命令列表和参数选项。

相关文献

Mino对象存储系统官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2224149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【力扣 + 牛客 | SQL题 | 每日4题】牛客大厂笔试真题SQLW6, W7, W8

1. 牛客大厂笔试真题SQLW6:统计所有课程参加培训人次 1.1 题目: 描述 某公司员工培训信息数据如下: 员工培训信息表cultivate_tb(info_id-信息id,staff_id-员工id,course-培训课程),如下所示: 注:该公…

不依赖F8键,如何快速进入电脑安全模式

如果不希望通过狂按F8键进入安全模式,可以尝试以下几种方法来进入电脑的安全模式: 方法一:使用Ctrl键 关闭电脑并重新启动。在电脑启动过程中,按下Ctrl键(需要在Windows系统启动画面出现之前就开始按)。当…

基于Django+Python的房屋信息可视化及价格预测系统设计与实现(带文档)

项目运行 需要先安装Python的相关依赖:pymysql,Django3.2.8,pillow 使用pip install 安装 第一步:创建数据库 第二步:执行SQL语句,.sql文件,运行该文件中的SQL语句 第三步:修改源…

Linux: network: wireshark IO图的一个问题

今天遇到一个问题,发现wireshark画的IO图,前几秒没有数据,但是根据Raw的pcap看,是有包的,这就迷惑了。 经同事提醒,这个IO在设置了多个画图filter的时候,可能导致开始前几秒没有输出。如下图 这…

Java中Thread类的基本认识与使用(如果想知道Java中有关Thread类的基本知识,那么只看这一篇就足够了!)

前言:在Java中,Thread类是实现多线程编程的核心。它允许程序同时执行多个任务,提高应用程序的响应能力和性能。通过Thread类,开发者可以轻松创建和管理线程,并实现复杂的并发操作。接下来,我们将探讨Thread…

Java中自增自减,赋值,逻辑,三元运算符

自增自减运算符 在某个变量前面或者后面加一--在某个变量前面或者后面减一 可以看见,当a输出时,a是没有变化的,说明如果是在变量后就是先使用再增加,而b输出时,b增加了1,说明如果是在变量前面就是先增加再…

机器人转人工时,开启实时质检(mod_cti基于FreeSWITCH)

文章目录 前言联系我们实现步骤1. 修改拨号方案2. 启用拨号方案 前言 在客户与机器人对话中,是不能开启质检功能的。因为机器人识别会与质检识别产生冲突。如果用户想通过机器人转接到人工时,开启质检功能,记录客户与人工之间的对话。应该如…

《a16z : 2024 年加密货币现状报告》解析

加密社 原文链接:State of Crypto 2024 - a16z crypto译者:AI翻译官,校对:翻译小组 当我们两年前第一次发布年度加密状态报告的时候,情况跟现在很不一样。那时候,加密货币还没成为政策制定者关心的大事。 比…

Python Numpy 实现神经网络自动训练:反向传播与激活函数的应用详解

Python Numpy 实现神经网络自动训练:反向传播与激活函数的应用详解 这篇文章介绍了如何使用 Python 的 Numpy 库来实现神经网络的自动训练,重点展示了反向传播算法和激活函数的应用。反向传播是神经网络训练的核心,能够通过计算梯度来优化模…

unity项目导出安卓工程后,在AndroidStudio打包报错:unityLibrary:BuildIl2CppTask‘.

下面这个是我在unity开发者社区提问后,他们回答得: 解决方案:我这边按照这几个方案检查了下,NDK和JDK都没问题,最后重启电脑才解决的,应该是文件被锁定了,我用的windows系统的。 验证&#xff…

达梦数据守护集群_备库重建(二)

目录 1、概述 1.1 实验场景 1.2 实验环境 2、故障模拟 3、重建方案1 3.1 登录主库、联机备份 3.2 脱机还原备库 3.3 模拟新业务数据 3.4 主库备份归档 3.5 利用归档恢复备库 3.6 启动备库 3.7 验证 4、重建方案2 4.1 登录主库、联机备份 4.2 脱机还原备库 4.3 …

是否有必要考PG认证?

如今PG很火,我在BOSS招聘查了一下,确实很多职位需要PG.那么考个PG认证确实很有必要! 当然这么快给出肯定答案,这公众号是发不出来的.必须有300个字才可以哦! 大家友情支持下,点点广告! 听我来细说 1.2.3 本小仙40有余可以说是80后.我们这代80后什么好事都没捞着,糟糕的事没有…

基于docker 部署redis

1、拉取镜像 docker pull redis:latest如果拉取失败可以尝试下配置镜像源,具体参考如下,目前暂可以使用 Docker切换镜像源-CSDN博客 2、创建配置文件 mkdir /usr/local/redis/conf vim redis.conf bind 0.0.0.0#protected-mode no port 6379 tcp-b…

用更多的钱买电脑而不是手机

如果,我们对自己的定义是知识工作者,那么在工作、学习相关的电子设备投入上,真的别舍不得花钱。 需要留意的是,手机,对于大部分在电脑前工作的人,不是工作设备。在我看来,每年投入到电脑的钱&…

前端经典【面试题】持续更新HTML、CSS、JS、VUE、FLUTTER、性能优化等

HTML/CSS 面试题 什么是语义化 HTML&#xff1f; 说明&#xff1a;语义化 HTML 使用 HTML 标签来描述内容的含义&#xff0c;而不仅仅是其外观。使用语义化标签可以提高可读性和可访问性&#xff0c;并对 SEO 友好。示例&#xff1a; <header><h1>网站标题</h1&…

基于C#开发游戏辅助工具的Windows底层相关方法详解

开发游戏辅助工具通常需要深入了解Windows操作系统的底层机制&#xff0c;以及如何与游戏进程进行有效交互。本文将基于C#语言&#xff0c;从Windows底层方法的角度来详细讲解开发游戏辅助工具的相关技术和概念。 一、游戏辅助工具的基本概述 游戏辅助工具&#xff0c;通常被称…

Java应用程序的测试覆盖率之设计与实现(三)-- jacoco cli 客户端

一、背景 上文已把覆盖率数据采集好了,并提供远程连接的tcp地址及端口。 jacoco cli文档jacoco cli jar包jacococli.jar 我下载好了,放在github工程里。 本文主要是介绍如何使用jacoco cli 客户端读取并生成覆盖率报告。 二、使用 1、dump覆盖率统计 java -jar doc/jacoc…

duilib的应用 在双屏异分辨率的显示器上 运行显示不出来

背景&#xff1a;win11&#xff0c;duilib应用&#xff0c;双显示器&#xff0c;两台分辨率相同&#xff0c;分别设置不同的缩放以后&#xff0c;应用运行以后&#xff0c;程序闪一下消失或者程序还在&#xff0c;但是UI显示不出来。 原因 窗口风格设置不合理&#xff0c;所以…

【办公类-57-01】美工室材料报销EXCEL表批量插入截图(图片)

背景需求&#xff1a; 我们班分到美工室&#xff0c;需要准备大量材料&#xff0c;根据原始的报销单EXCLE&#xff0c;里面有商品名称、图片、链接、单位、数量等信息 今天我和搭档一起填写新表&#xff0c;发现手机截图的图片插入EXCEL后非常大&#xff0c; 需要手动调整图片…

alovajs:前后端交互还能这么玩?

嘿&#xff0c;小伙伴们&#xff01;今天我要和大家分享一个超级有趣的发现。最近在折腾项目时&#xff0c;我遇到了一个叫 alovajs 的工具&#xff0c;它居然能帮我们构建 Client-Server 交互层&#xff01;听起来有点高大上&#xff0c;但其实超级实用。一起来探索这个新大陆…