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 的示例)。那么,是否可以BodyPartWriterResponse对象一起使用?

4

1 回答 1

1

BodyPartWriter& BodyPartReaderAPI 仅用于读取或写入多部分编码的客户端请求/响应的一部分(因此,它们位于multipart模块下)。

发送多部分服务器端响应没有任何意义。

在您的情况下,您正在返回响应,向content-disposition浏览器提供有关如何命名文件的提示。目前没有自动发送文件的方法,该文件也将填写适当的标题。

于 2015-12-05T00:04:23.733 回答