使用AWS开发工具包Go的完整URI从S3下载文件

Pau*_*cas 1 amazon-s3 go aws-sdk

我看到的示例使用AWS Go for SDK从S3下载文件的形式如下:

downloader := s3manager.NewDownloader(session, /* other args */)

s3object := &s3.GetObjectInput{
    Bucket: aws.String(myBucket),
    Key: aws.String(myKey),
}

bytesDownloaded, err := downloader.Download(myFile, s3object)
Run Code Online (Sandbox Code Playgroud)

也就是说,使用存储桶和密钥来指定文件。但是,如果我已经在S3上拥有文件的完整URI,该怎么办?例如:

https://s3.us-west-2.amazonaws.com/myBucket/myKey

有没有一种方法可以使用SDK指定要直接使用URL下载的文件?

不,存储桶不是公共的。在SDK中,我还要设置访问密钥和秘密密钥(从示例代码中删除)。

最后,如果根本无法通过SDK执行我所要求的操作,那么这是可以接受的(尽管不是期望的)答案。

Top*_*opo 5

无法做您想做的事。获取私有对象的唯一方法是:

  1. 使用存储桶和密钥下载文件
  2. 生成一个预签名的URL并对该URL进行操作hhtp.Get(要生成预签名的URL,您需要存储桶和密钥)

如果您确实要使用URL,建议您围绕s3.GetObjectInput该URL 创建一个包装,将URL作为参数,对其进行解析,然后创建该s3.GetObjectInput对象。

另外,我不知道您能否做到这一点,取决于您的用例,但是如果您将URL存储在某个地方,这就是为什么要使用它们,则可以考虑以较长的到期时间存储预签名的url,然后,当您要获取对象时,可以使用该URL。