@@ -1,45 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/sha256"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/aws/aws-sdk-go-v2/aws"
|
||||
"github.com/aws/aws-sdk-go-v2/credentials"
|
||||
"github.com/aws/aws-sdk-go-v2/service/s3"
|
||||
)
|
||||
|
||||
// 列出并读回目标桶里的对象,打印 键/字节/sha256:资源字节是否真在目标存储里,只能这样核。
|
||||
func main() {
|
||||
endpoint, bucket := os.Getenv("S3_ENDPOINT"), os.Getenv("S3_BUCKET")
|
||||
client := s3.New(s3.Options{
|
||||
Region: "us-east-1",
|
||||
BaseEndpoint: aws.String(endpoint),
|
||||
Credentials: credentials.NewStaticCredentialsProvider(os.Getenv("S3_KEY"), os.Getenv("S3_SECRET"), ""),
|
||||
UsePathStyle: true,
|
||||
})
|
||||
ctx := context.Background()
|
||||
pages := s3.NewListObjectsV2Paginator(client, &s3.ListObjectsV2Input{Bucket: aws.String(bucket)})
|
||||
for pages.HasMorePages() {
|
||||
page, err := pages.NextPage(ctx)
|
||||
if err != nil {
|
||||
fmt.Println("list error:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
for _, item := range page.Contents {
|
||||
out, err := client.GetObject(ctx, &s3.GetObjectInput{Bucket: aws.String(bucket), Key: item.Key})
|
||||
if err != nil {
|
||||
fmt.Println("get error:", item.Key, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
hash := sha256.New()
|
||||
size, _ := io.Copy(hash, out.Body)
|
||||
out.Body.Close()
|
||||
fmt.Printf("%s\t%d\t%s\n", *item.Key, size, hex.EncodeToString(hash.Sum(nil)))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user