2016-10-25 61 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