botocoreとaiohttpサービスを使用して、S3にアップロードされたファイルのコンテンツを取得したいと思います。ファイルが巨大なサイズがありとおり:aiobotocore-aiohttp - S3ファイルのコンテンツを取得し、それを応答でストリームします
- を私はaiohttp、aiobotocore(S3からファイルをダウンロードしながら他の要求を処理できるようにしたい
- 、メモリ内のファイル全体の内容を保存する必要はありません)、
- 私は私がダウンロードしたファイルに変更を適用することができるようにしたいので、私はラインでそれをラインを治療し、今のクライアント
への応答をストリーミングしたい、私は、次のコードを持っています私のaiohttpハンドラ:
import asyncio
import aiobotocore
from aiohttp import web
@asyncio.coroutine
def handle_get_file(loop):
session = aiobotocore.get_session(loop=loop)
client = session.create_client(
service_name="s3",
region_name="",
aws_secret_access_key="",
aws_access_key_id="",
endpoint_url="http://s3:5000"
)
response = yield from client.get_object(
Bucket="mybucket",
Key="key",
)
与えられたファイルから1行を読み込むたびに、私は応答を送りたいと思います。実際、get_object()は内部にBody(ClientResponseContentProxyオブジェクト)を持つdictを返します。メソッドread()を使用して、予想される応答のチャンクを取得してクライアントにストリームするにはどうすればよいですか?
私は:
for content in response['Body'].read(10):
print("----")
print(content)
ループ内のコードが実行されることはありません。
しかし、私はやるとき:
result = yield from response['Body'].read(10)
私は結果内のファイルの内容を取得します。私はここでread()を使う方法についてちょっと混乱しています。
おかげ
ありがとうございました。 – jean553