#zip-archive #s3 #archive #zip #input-file

bin+lib 钴蓝-s3-存档器

一个库和 CLI 工具,用于在 S3 中创建和验证 ZIP 存档

2 个不稳定版本

0.2.0 2022 年 12 月 14 日
0.1.0 2022 年 11 月 28 日

#351压缩

Apache-2.0

59KB
1K SLoC

s3-存档器

s3-存档器 是一个二进制程序,可以从 S3 中的多个文件创建 ZIP 存档。

给定输出 S3 URL 参数和标准输入中按行分隔的 S3 URL 列表,s3-存档器 将将每个输入文件添加到输出 S3 URL 中的存档中。s3-存档器 使用 S3 分片上传以保持内存使用量低。

Crates.io docs.rs Apache 2.0 licensed Build Status

用法

Usage: s3-archiver-cli <COMMAND>

Commands:
  archive            Create an ZIP archive in S3 from source files in S3
  validate-archive   Validate a ZIP archive matches the given manifest
  validate-manifest  Validate the calculated crc32 of files in the manifest match those recorded the manifest
  unarchive          Extract compressed files from archive
  list               List archive files
  help               Print this message or the help of the given subcommand(s)

Options:
  -h, --help  Print help information

除非提供压缩参数,否则每个文件将以不压缩的形式存储在 ZIP 中。支持的压缩包括 deflate、bzip2、lzma、zstd 和 xz。所有输入文件将使用相同的压缩进行压缩。

ZIP 中每个文件的路径将是输入对象的键,除非提供 prefix_strip 参数。如果提供 prefix_strip 参数,则其值将在将其写入 zip 之前从输入对象键中删除。例如,具有 prefix_strip 参数 my/my/ /input/key.txt 将作为 input/key.txt 添加到 zip 中。 prefix_strip 必须不以 \ 开头,但必须以 \ 结尾,这将在代码中明确验证,而不是“魔术般”编辑。

限制

async-zip crate 不支持 ZIP64,这引入了以下限制:

  • 存档中文件的数量 65,535。
  • 存档中文件的大小 [字节] 4,294,967,295。
  • 存档的大小 [字节] 4,294,967,295。
  • 中央目录大小 [字节] 4,294,967,295。

当前此二进制程序的失败模式是,如果达到这些限制则静默。

测试

此二进制程序的测试在三种模式下运行,所有这些模式都使用 localstack

  • 单个实例 Localstack。
  • 带有 docker compose 的 Localstack。
  • 使用 testcontainers-rs 的多个 Localstack 实例。

单个实例 Localstack

要运行 cargo test,必须有一个运行中的 localstack 实例,并监听在 127.0.0.1:4566。测试代码将连接到 localhost:4566(因此 localhost 必须解析到您的本地机器)。由于 localstack 实例在所有测试之间共享,因此它们必须按顺序运行,使用

cargo test -- --test-threads=1

以确保测试不共享资源。

使用 docker compose 运行 Localstack

要将测试作为 docker compose 的一部分运行,请使用

make test

这将作为 docker compose 的一部分启动 localstack。注意 make test 不运行 docker compose down,因此这将留下一个正在运行的容器。与单个实例方法一样,测试必须在单个线程或使用隔离资源中运行。

TestContainers

要使用 testcontainers 运行测试,请使用 test_containers 功能标志。

cargo test --features test_containers 

对于每个测试,都会启动一个单独的本地 localstack 实例,监听不同的端口,允许测试在隔离和并行中运行。

构建

可以使用 cargo 构建和运行项目。要构建项目,请使用 cargo build,要运行项目,请使用 cargo run,要安装项目,请使用 cargo install

依赖项

~57MB
~1M SLoC