Wig*_* A. 1 python redirect amazon-s3 flask
在设置一些与S3相关的标头时,我需要重定向到S3 URL。Flask路线返回的页面带有Redirecting to <url>和可单击的链接,并且浏览器不会自动重定向。为什么重定向不起作用?
@app.route("/download/<token>")
def download(token):
...
response = redirect(download_url)
response.headers = generate_s3_headers(key, md5)
return response
Run Code Online (Sandbox Code Playgroud)
我可以使用请求成功下载文件。
import requests
r = requests.get(download_url, headers=headers)
Run Code Online (Sandbox Code Playgroud)
这是一个复合问题。直接的问题是您要覆盖Location标头。但是,如果解决此问题,则在进行重定向时不会保留标头,因此S3将不会获得标头。
如果您需要使用特殊的标头提供来自S3的资源,则需要下载并通过您的应用传递该文件,而不是将用户直接重定向到该文件。
headers = generate_s3_headers(key, md5)
r = requests.get(url, headers=headers, stream=True)
response = app.response_class(r.iter_content())
response.headers.set('Content-Disposition', 'attachment')
return response
Run Code Online (Sandbox Code Playgroud)
以下说明了为什么覆盖Location标头会中断重定向,但又不能解决您的特定问题。
重定向响应包括Location标头。这是浏览器知道下一步的方法。redirect设置标题,并在浏览器不跟随它的情况下生成链接。不过,您将完全替换所有标题,而将删除Location。使用headers.extend添加您额外的头,而不是完全替换它们。
response = redirect(download_url)
response.headers.extend(generate_s3_headers(key, md5))
return response
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |