相关文章推荐
玉树临风的冲锋衣  ·  css3中 ...·  1 年前    · 
俊逸的长颈鹿  ·  Hook ...·  1 年前    · 

ListObjectsV2

ListObjectsV2 的 REST API 语法格式如下:

GET /?list-type=2&continuation-token=ContinuationToken&delimiter=Delimiter&encoding-type=EncodingType&fetch-owner=FetchOwner&max-keys=MaxKeys&prefix=Prefix&start-after=StartAfter HTTP/1.1
Host: Bucket.s3.amazonaws.com
x-amz-request-payer: RequestPayer
x-amz-expected-bucket-owner: ExpectedBucketOwner

其中有几个参数需要重点关注。

  • max-keys
    每个请求返回 bucket 中的部分或全部(最多1000个)对象。可以通过 max-keys 指定每次请求拉取的对象数量,有效取值范围是 1 到 1000。
  • prefix
    如果需要获取 bucket 中某个目录下的对象数量,可以通过 prefix 来指定对象的前缀。
  • continuation-token
    ListObjectsV2 采用的是深分页的方式拉取对象,所以使用类似 NextToken 的标识来进行分页操作。其中 continuation-token 在上一页请求返回中可以获取到。

回包中有一个字段需要重点关注。

IsTruncated 表示列表是否被截断。如果为 true 表示没有拉取完,如果为 false 表示已全部拉取。

Golang SDK 示例

下面以 S3 Golang SDK 为例,给出实现示例。

input := &s3.ListObjectsV2Input{
    Bucket:  aws.String("your-bucket-name"),
    Prefix:  aws.String("path/to/folder/"),
    MaxKeys: aws.Int64(1000),
objectCount := 0
for {
    resp, err := clt.ListObjectsV2(input)
    if err != nil {
        log.Fatal(err)
    objectCount += len(resp.Contents)
    fmt.Println("Objects Count:", objectCount)
    if !*resp.IsTruncated {
        break // Reach the end of the object listing
    input.ContinuationToken = resp.NextContinuationToken

在上述示例中,我们首先将 MaxKeys 设置为 1000,然后使用循环调用 ListObjectsV2 API,直到返回的 IsTruncated 字段为 false,表示已经到达对象列表的末尾。在每次迭代中,我们累加返回的对象数量,并更新 ContinuationToken 以继续下一次分页调用。

通过使用分页机制,您可以逐步获取超过 1000 个对象,并在循环中处理每个分页的结果。这样,您就可以处理任意数量的对象,而不会超出 AWS S3 API 的限制。

关于 S3 客户端的初始化可以参考如下代码。

package main
import (
	"log"
	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/s3"
func main() {
	// 创建新的AWS会话
	sess, err := session.NewSession(&aws.Config{
		Region: aws.String("your-region"),
		// 可选:提供凭证信息,或者SDK将尝试使用默认凭证。
		// Credentials: credentials.NewStaticCredentials("your-access-key", "your-secret-key", ""),
	if err != nil {
		log.Fatal(err)
	// 创建新的S3服务客户端
	svc := s3.New(sess)
	// 使用svc进行S3操作,例如上传、下载、删除对象等
	// ...
	// 关闭会话
	sess.Close()

在上述示例中,您需要进行以下替换:

  • “your-region”:替换为您的 AWS 区域代码,例如 “us-west-1”。
  • “your-access-key"和"your-secret-key”:如果您没有将凭证信息设置为环境变量或配置文件中,可以取消注释并替换为您的AWS访问密钥ID和秘密访问密钥。

通过创建AWS会话和使用会话创建S3服务客户端,您可以使用Go客户端执行各种S3操作,如上传对象、下载对象、删除对象等。完成操作后,您可以关闭会话。

请确保您已经使用go get命令安装了github.com/aws/aws-sdk-go依赖,这样您就可以在您的代码中使用AWS S3 Go客户端。

Amazon S3 API Reference - Amazon Simple Storage Service
Get the size of a folder in Amazon S3 using Go SDK 2

aws-s3-signurl AWS CLI当前不具有对URL进行签名的功能,以限制时间访问安全存储。 这个简单的实用程序采用存储名称和(可选)键名称,并为其输出签名的URL。 如果仅提供了存储名称,则将为每个密钥输出一个已签名的URL。 如果还指定了键,则仅输出该存储/键组合。 凭证是从环境变量或~/.aws/config (如果存在)中加载的。 有关更多详细信息,请参阅。 npm install --global aws-s3-signurl aws-s3-signurl {bucketname} [{keyname}] [{expires}] 如果仅提供了存储名称,则将列出存储的内容。 如果提供了密钥,则仅输出该密钥。 如果提供了到期时间(数字,以秒为单位),则该链接将在该秒内有效(默认值= 900秒)。 一组脚本,用于使用AWS资源执行各种任务 ### s3.py按存储计算AWS S3账单 ### generate_csshx.py打印Csshx命令以连接到与给定过滤器集匹配的所有EC2实例 ### key_inspector.py打印有关给定S3密钥的大量信息 ### cleanup_snapshots.py删除孤立的ECB快照。 例如,那些终止的EC2实例或已删除的AMI留下的实例。 ## License MIT许可证,请参阅LICENSE.txt 1.aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]" 2.aws s3api --profile PROFILE_NAME list-objects --bucket BUCKET_NAME --output jso 因此需要翻页遍历出所有的对象。 private LinkedList<S3ObjectSummary> allObjectList = new LinkedList<S3ObjectSummary>(); public void download(){ CCR无法同步除所有者之外的权限,需要进行其他权限的同步,需要通过写批量同步权限的脚本完成同步操作。SCR可以同步对象的权限,不需要额外的权限同步操作。分为2种: SCR , CCR。 HTTP 500 InternalError: Server 及底层设备fault, 网络高负载, 自动扩展中 HTTP 503-Slowdown: 1.Customer must reduce their request, 2.开启了存储版本, 过多的版本对象造成.3. using single-threaded download 地理距离(通过使用S3 Acceleration or repl... 每个点存储指标可以查看当前的大小,AWS实在太多了,一个一个去点开实在太麻烦了,S3对比OSS还是有不是太适合国人喜欢的地方,分享查看脚本, 输入access_key和区域就可以用了。 #!/usr/bin/env python3 # coding=utf-8 import boto3 import datetime #key填写账户生成的,可以去用户账户里面生成 aws_access_key_id = '' aws_secret_access_key = '' #所在区域 region_ 在前面的文章中,我们实践过AWS S3跨区域复制功能(CRR),将对象从一个region的存储复制到另一个region的存储。今天来实践一下对于S3事件通知的操作。 S3提供了事件通知功能,可以在存储发生某些事件时接收通知。本次实践的目标有两个,一是当存储上传新对象时发送电子邮件提醒,二是当存储上传图片时进行大小缩放。 实践1 存储上传新对象时发送邮件提醒 这个操作比较简单,S3...