4

私はcsvでファイルを返すようなエンドポイントを持っています:

# POST /export/
@asyncio.coroutine
def export(request):
    post = yield from request.post()
    if not post.get('passwd', None) == 'topsecret':
        return web.Response(status=403)

    csv = data.encode()
    resp = web.StreamResponse(headers=aiohttp.MultiDict({
        'CONTENT-DISPOSITION': 'attachment; filename="%d.csv"' % int(time.time())}))
    resp.content_type = 'text/csv'
    resp.content_length = len(csv)
    yield from resp.prepare(request)

    resp.write(csv)

    return resp

私の質問は次のとおりです。何らかの方法でヘッダーを自動的に設定することは可能ですか? ドキュメントにあるように、 aiohttp にはメソッドBodyPartWriterを持つクラスがありますset_content_disposition。しかし、私が理解している限りでは、それはクライアント API でしか使用できませんでした (少なくとも、クライアント API の例しかありません)。それで、オブジェクトで使用BodyPartWriterすることは可能ですか?Response

4

1 に答える 1

1

BodyPartWriter& API は、マルチパートエンコードされたクライアント側のBodyPartReader要求/応答の一部を読み書きするためだけのものです(したがって、それらはモジュールの下にあります)。multipart

マルチパートのサーバー側応答を送信しても意味がありません。

あなたの場合content-disposition、ファイルに名前を付ける方法についてのヒントとしてブラウザに提供して、応答を返しています。現時点では、適切なヘッダーも埋めるファイルを自動的に送信する方法はありません。

于 2015-12-05T00:04:23.733 に答える