gpt4 book ai didi

python - 文件下载的 Flask 代理响应

转载 作者:太空宇宙 更新时间:2023-11-04 05:22:49 25 4
gpt4 key购买 nike

我正在使用 Flask 路由作为代理来下载文件,如下所示:

@esa_handler.route("/data/<int:series>/<int:file_num>", methods=["GET"])
def DownloadRemote(series, file_num):
"""
Downloads the remote files from the ESA.
:param series: 0-20.
:param file_num: File within the series, 0-255
:return: Compressed CSV file.
"""

# if the file is bad.
if series >= 20 and file_num > 110:
return jsonify({"error": "file does not exist."})

url = "http://cdn.gea.esac.esa.int/Gaia/gaia_source/csv/GaiaSource_000-{:03d}-{:03d}.csv.gz".format(series,
file_num)
req = requests.get(url, stream=True)
return Response(stream_with_context(req.iter_content(chunk_size=2048)), content_type=req.headers["content-type"])

它工作正常,但是,呈现给客户端的文件名是传递给端点的文件号。例如,如果我将 http://127.0.0.1:5000/esa/data/0/0 下载第一个文件,它会下载,但 Chrome/Firefox/IE/Edge 提供以文件名为“0”的方式保存文件。虽然这没有错,但我想要更好的用户体验。

我如何拦截响应以根据请求的 URL 提供文件名?

最佳答案

这可以通过 Content-Disposition 来完成HTTP header 。您可以在此处为新下载的文件指定文件名。

这可以添加到 flask 中 Response如下:

url = "http://cdn.gea.esac.esa.int/Gaia/gaia_source/csv/GaiaSource_000-{:03d}-{:03d}.csv.gz".format(series,
req = requests.get(url, stream=True)

headers = Headers()
headers .add('Content-Type', req.headers["content-type"])
headers .add('Content-Disposition', 'attachment; filename="filename.txt"')

return Response(stream_with_context(req.iter_content(chunk_size=2048)), headers=headers)

注意:为简单起见,Content-Type 已移至 headers

关于python - 文件下载的 Flask 代理响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39782186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com