Как проверить размер объекта s3 с помощью golang - PullRequest
2 голосов
/ 28 марта 2019

Я реализовал функцию загрузки объекта из корзины AWS S3. Это отлично работает. Но мне нужно отобразить индикатор загрузки. Для этого мне нужно заранее знать размер объекта согласно здесь , Кто-нибудь знает, как получить размер объекта?

Вот мой код.

func DownloadFromS3Bucket(bucket, item, path string) {
    file, err := os.Create(filepath.Join(path, item))
    if err != nil {
        fmt.Printf("Error in downloading from file: %v \n", err)
        os.Exit(1)
    }

    defer file.Close()

    sess, _ := session.NewSession(&aws.Config{
        Region: aws.String(constants.AWS_REGION), Credentials: credentials.AnonymousCredentials},
    )

    // Create a downloader with the session and custom options
    downloader := s3manager.NewDownloader(sess, func(d *s3manager.Downloader) {
        d.PartSize = 64 * 1024 * 1024 // 64MB per part
        d.Concurrency = 6
    })

    numBytes, err := downloader.Download(file,
        &s3.GetObjectInput{
            Bucket: aws.String(bucket),
            Key:    aws.String(item),
        })
    if err != nil {
        fmt.Printf("Error in downloading from file: %v \n", err)
        os.Exit(1)
    }

    fmt.Println("Download completed", file.Name(), numBytes, "bytes")
}

1 Ответ

3 голосов
/ 28 марта 2019

Вы можете использовать HeadObject , который содержит заголовок Content-Length.

API-интерфейс HeadObject для Amazon Simple Storage Service.

Операция HEAD извлекает метаданные из объекта, не возвращая сам объект.Эта операция полезна, если вас интересуют только метаданные объекта.Чтобы использовать HEAD, вы должны иметь доступ READ к объекту.

...