使用aiohttp将数据作为文件发送

时间:2015-12-04 17:09:44

标签: python python-3.x python-asyncio aiohttp

我有这样的端点,它返回一个带有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

接下来我的问题是:是否有可能以某种方式自动设置标题?正如documentation所说,aiohttp具有BodyPartWriter类,其具有set_content_disposition方法。但是,据我所知,它只能用于客户端API(或者至少,只有客户端API的示例)。 那么,是否可以将BodyPartWriterResponse个对象一起使用?

1 个答案:

答案 0 :(得分:1)

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

发送 multipart 服务器端响应没有任何意义。

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