使用Boto3从S3存储桶读取数据的不同方式

时间:2019-06-26 17:51:39

标签: json python-3.x amazon-s3 python-requests boto3

我正在尝试从s3存储桶中读取一些json文件,然后尝试将数据发布到rds和redshift中(使用为此开发/打算的post api)。

我使用boto3通过2种方法来实现此目的。以下是这些:

第一种方式:

import boto3
import json
import requests

url = 'xxxx.us-east-1.elb.amazonaws.com/v1'
headers = {'content-type': 'application/json', 'Host': 'development.my.dns.com'}
endpoint = url+'/my/post/endpoint'
s3_client = boto3.client("s3")
fileObj = s3_client.get_object(Bucket='my-bucket-name', Key='my-key-name'])
data = fileObj['Body'].read().decode('utf-8')
with requests.request('POST', endpoint, data=data, headers=headers, auth=(username, pwd), verify=False, stream=True) as r:
    print("Status Code:",r.status_code)

第二种方式:

import boto3
import json
import requests

url = 'xxxx.us-east-1.elb.amazonaws.com/v1'
headers = {'content-type': 'application/json', 'Host': 'development.my.dns.com'}
endpoint = url+'/my/post/endpoint'
s3_res = boto3.resource('s3')
contentObj = s3_res.Object('my-bucket-name', 'my-key-name')
fileContent = contentObj.get()['Body'].read().decode('utf-8')
data = json.dumps(json.loads(fileContent))
with requests.request('POST', endpoint, data=data, headers=headers, auth=(username, pwd), verify=False, stream=True) as r:
    print("Status Code:",r.status_code)

基本上,两种方法中的所有内容都是相同的(urlendpointheadersrequests.request)和type(data)<class 'str'>。但是状态代码总是不同的。

第二种方式给出Status Code: 200。但是第一种方法会随机产生Status Code: 413Status Code: 502

有人可以解释为什么会这样吗?以上两种方法有何不同?我试图了解boto3 read()数据不同时的情况。

0 个答案:

没有答案