我开始寻找上传的测试文件。 我看到在
.localstack/data/s3_api_calls.json
内有一个编码版本的上传文件,但我在其他地方找不到它。考虑到:
DATA_DIR = /tmp/localstack/data
,我希望能在这里找到它,但找不到。虽然在文件系统上直接访问它并不重要,但这样做会很好。
我的问题是:是否有任何地方/方法可以查看上传到localstack模拟S3服务的文件?
.localstack/data/s3_api_calls.json
内有一个编码版本的上传文件,但我在其他地方找不到它。 DATA_DIR = /tmp/localstack/data
,我希望能在这里找到它,但找不到。在最新的更新后,我们现在只有一个端口,即4566
。
是的,您可以查看您的文件。
在chrome中打开http://localhost:4566/your-bucket-name/you-file-name
。
现在您应该能够看到您文件的内容。
aws --endpoint-url=http://localhost:4572 s3 ls s3:<your-bucket-name>
aws --endpoint-url=http://localhost:4572 s3 ls <your-bucket-name>
,就可以列出您指定的 S3 存储桶中的文件。” - bovus4566
。因此,命令应为 aws --endpoint-url=http://localhost:4566 s3 ls <your-bucket-name>
。 - jdenoc我再次阅读了原始文章,其中写道:
"一旦我们开始上传,我们就不会在该目录中看到新文件的出现。相反,我们的上传将被记录在此文件(s3_api_calls.json)中,作为原始数据。"
因此,似乎没有直接查看文件的方式。
但是,Commandeer 应用程序提供了查看 localstack 的视图,其中包括模拟 S3 存储桶的目录列表。目前还没有办法查看文件的内容,但目录结构已足够我所做的事情。 更新:根据 @WallMobile 的说法,现在也可以查看文件的内容。
localstack
默认将数据保存在内存中。除非您指定一个数据目录,否则就会发生这种情况。显然,如果在内存中,您不会在任何地方看到任何文件。mkdir ~/.localstack
然后您需要指示localstack
将数据保存在该位置。您可以通过在docker-compose.yml
文件中添加DATA_DIR=...
路径和卷来实现:
localstack:
image: localstack/localstack:latest
ports:
- 4566:4566
- 8055:8080
environment:
- SERVICES=s3
- DATA_DIR=/tmp/localstack/data
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- /home/alexis/.localstack:/tmp/localstack
然后重新构建并启动Docker。
一旦localstack
进程启动,您将在~/.localstack/data/...
下看到一个JSON数据库。
警告:如果您处理非常大的文件(Gb),那么速度会非常慢。问题在于所有数据都将保存在一个base64的JSON文件中。换句话说,它将生成比您发送的文件更大的文件,并且重新读取它也将是巨大的。可以通过将legacy storage机制设置为false来解决此问题:
LEGACY_PERSISTENCE=false
我还没有测试过那个标志。
aws --endpoint-url=http://localhost:4566 s3 ls s3://<bucket-name>/<folder-in-bucket>/
图像被保存为base64编码的字符串,存储在文件recorded_api_calls.json
中。
我已经传递了DATA_DIR=/tmp/localstack/data
文件被保存在/tmp/localstack/data/recorded_api_calls.json
下
打开这个文件,从任何看起来像这样的API调用中复制数据(d)
"a": "s3", "m": "PUT", "p": "/bucket-name/foo.png"
使用base64解码提取这些数据
您可以使用此脚本从localstack s3中提取数据
https://github.com/nkalra0123/extract-data-from-localstack-s3/blob/main/script.sh
DATA_DIR=/tmp/localstack/data
,并且使用'./.localstack:/tmp/localstack'
的卷。我已经检查了两个目录(一个在本地,另一个在 Docker 内部),唯一存在的文件是 .json 文件。我还在 $TMPDIR 下检查了localstack
目录,但是它是空的。 - Alan W. Smith