2016-10-25 48 views
0

我有一个从URL获取文件并将其转换为OpenCV的图像的方法如何从S3使用boto3访问项目和read(),其内容

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()

回答

3

我会做是这样的:使用提出的高级别ressource

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

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) 

对于,我从来没有通过this SO answer试过建议boto3