【问题标题】:How to generate URL to download file from S3 bucket如何生成 URL 以从 S3 存储桶下载文件
【发布时间】:2021-09-29 21:37:57
【问题描述】:

我想从 Amazon 的 Copernicus Digital Elevation Model 存储桶中获取指向云优化 geoTIFF 的 URL。

安装boto3(带pip3 install boto3)后,我靠this answer到问题Can I use boto3 anonymously?下载单个文件:

import boto3
from botocore import UNSIGNED
from botocore.client import Config

s3 = boto3.client('s3', region_name='eu-central-1', config=Config(signature_version=UNSIGNED))

然后我查询存储桶中的对象列表,使用this answer的第二行到问题Use boto3 to download from public bucket

objects = s3.list_objects(Bucket='copernicus-dem-30m')

然后我访问objects['Contents']中的一个值,例如第一个(即索引0):

key = objects['Contents'][0]['Key']

key 现在是:

Copernicus_DSM_COG_10_N00_00_E006_00_DEM/Copernicus_DSM_COG_10_N00_00_E006_00_DEM.tif

我通过以下方式下载此文件:

s3.download_file('copernicus-dem-30m', key, key.split('/')[-1])

我怎样才能生成一个 URL,而不是下载,然后我可以使用它来下载文件,也许使用 wget 或只是将其粘贴到浏览器?


上面显示的这段代码基于线程:How to get Copernicus DEM GeoTIFFs for a bounding box using Python

【问题讨论】:

    标签: python amazon-web-services amazon-s3


    【解决方案1】:

    S3 使用这种格式: https://.s3.amazonaws.com/

    url = 'https://copernicus-dem-30m.s3.amazonaws.com/' + key
    

    所以上面的例子看起来像这样: https://copernicus-dem-30m.s3.amazonaws.com/Copernicus_DSM_COG_10_N00_00_E006_00_DEM/Copernicus_DSM_COG_10_N00_00_E006_00_DEM.tif

    【讨论】:

      【解决方案2】:

      有关公共访问存储桶的 S3 URL 格式,请参阅 Geoffrey 的回答。

      要生成无论存储桶/对象是否公开都有效的 URL,您可以使用generate_presigned_url

      s3.generate_presigned_url(
          'get_object',
          Params = {'Bucket': 'copernicus-dem-30m', 'Key': key},
          ExpiresIn = SIGNED_URL_TIMEOUT
      )
      

      … with a suitably chosen SIGNED_URL_TIMEOUT (in seconds).

      【讨论】:

      • 谢谢。我收到错误:AttributeError: 'S3' object has no attribute 'client'
      • 正在查找...
      • @zabop 抱歉,复制和粘贴错误。现已修复。
      • 感谢@Konrad,现在可以使用了! :) 我意识到生成的 url 实际上并不依赖于 SIGNED_URL_TIMEOUT,如果我不传递任何 SIGNED_URL_TIMEOUT 值,我会得到相同的 URL。可以在 2 分钟内接受...
      • @zabop 啊,是的,我没有注意您的具体用例:您的存储桶是公开的,所以从技术上讲,您根本不需要预签名的 URL。我的回答更笼统,也适用于私人存储桶。
      猜你喜欢
      • 1970-01-01
      • 2019-11-25
      • 2015-05-20
      • 2017-02-16
      • 2013-10-15
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      相关资源
      最近更新 更多