繁体   English   中英

如何在 aiohttp 中重定向发布请求?

[英]How to redirect post request in aiohttp?

我正在尝试制作一个简单的服务,它可以从发布请求下载文件,然后将其重定向到另一个服务。 我怎样才能通过我的文件?

我尝试使用 HTTPFound,但我不知道如何传递文件:

raise web.HTTPFound(
        location='some_url_to_redirect',
        headers=request.headers,
        body=request.content,
   )
from aiohttp import web, MultipartReader

async def store_files_handler(request):
    reader = MultipartReader.from_response(request)
    field = await reader.next()
    file_name = field.filename
    file_path = f"{FOLDER}/file_name"

    with open(file_path, 'wb') as file:
        while True:
            chunk = await field.read_chunk()
            if not chunk:
                break
            file.write(chunk)

    raise web.HTTPFound(
        location='some_url_to_redirect',
        headers=request.headers,
        body=reader,
    )

def register(app):
    app.add_routes([web.post('/store', store_files_handler)])

实际上,我决定使用代码 307,所以它将是:

web.HTTPTemporaryRedirect('some_url_to_redirect')

it can redirect POST request

您无法真正使用 302 重定向响应发送内容(大多数浏览器只会忽略它并重定向)。 目标位置必须为文件提供服务。 因此,您需要使用该位置扩展路由器并在那里提供文件。

app.add_routes([web.post('/store', store_files_handler)])
app.add_routes([web.static('/location_to_file', 'path_to_static_folder')])

或者您可以直接从/store端点提供它,以适合您的设计

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM