2 个不稳定版本
0.2.0 | 2022 年 12 月 14 日 |
---|---|
0.1.0 | 2022 年 11 月 28 日 |
#351 在 压缩
59KB
1K SLoC
s3-存档器
s3-存档器
是一个二进制程序,可以从 S3 中的多个文件创建 ZIP 存档。
给定输出 S3 URL 参数和标准输入中按行分隔的 S3 URL 列表,s3-存档器
将将每个输入文件添加到输出 S3 URL 中的存档中。s3-存档器
使用 S3 分片上传以保持内存使用量低。
用法
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