如何使用boto3从S3访问项目并读取()其内容

时间:2016-10-25 11:56:57

标签: python numpy amazon-s3 boto3

我有一个从URL获取文件并将其转换为OpenCV图像的方法

def my_method(self, imgurl):
   req = urllib.urlopen(imgurl)
   r = req.read()
   arr = np.asarray(bytearray(r), dtype=np.uint8)
   image = cv2.imdecode(arr,-1) # 'load it as it is'
   return image

我想使用boto3从s3存储桶访问一个对象并将其转换为图像就像上面的方法一样。但是,我不知道如何使用boto3从存储桶访问项目,然后进一步了解该项目的read()内容。

以下是我尝试的内容

>>> import botocore
>>> import boto3
>>> client = boto3.client('s3',aws_access_key_id="myaccsskey",aws_secret_access_key="secretkey")
>>> bucketname = "mybucket"
>>> itemname = "demo.png"

问题

  1. 如何使用boto3从存储桶访问特定项目?
  2. 使用read my_method是否可以req.read()访问项目的内容与# use selenium to start Chrome session to open a certain page dr = webdriver.Chrome() dr.get("http://www.google.com") 中的内容类似?

1 个答案:

答案 0 :(得分:4)

我会这样做 1

import boto3
s3 = boto3.resource('s3',
                     use_ssl=False,
                     endpoint_url="http://localhost:4567",
                     aws_access_key_id="",
                     aws_secret_access_key="",
)
obj = s3.Object(bucketname, itemname)

对于 2 ,我从未尝试this SO answer建议:

body = obj.get()['Body'].read()

使用ressource提议的高级boto3