【发布时间】:2022-12-17 19:52:15
【问题描述】:
我有一个带有下载端点的 FastAPI 应用程序。此下载端点的作用是使用 BlobServiceClient(用于 Azure Blob 存储)为请求中指定的文件生成令牌和 Blob URL。我想要做的是将用户重定向到该 URL。这是下载点的代码 sn-p(我注释掉了一些东西,因为我不允许显示代码)。
@router.get("..path", tags=["some tags"], summary=..., responses={404: {"model": ...}, 403: {"model": ...}, 307: {"model": ...}}, response_model_exclude_none=True)
async def download_file(
# there's a depends on an API key
blob_path: str = Query(
...
)):
credential = ClientSecretCredential(...) //secrets
blob_service_client = BlobServiceClient(f"https://{storage_account}.blob.core.windows.net", credential=credential)
user_delegation_key = blob_service_client.get_user_delegation_key(key_start_time=datetime.utcnow(),key_expiry_time=datetime.utcnow() + timedelta(minutes=30))
token = generate_blob_sas(account_name=...,
container_name=...,
blob_name=blob_path,
user_delegation_key=user_delegation_key,
permission=BlobSasPermissions(read=True),
expiry=datetime.utcnow() + timedelta(minutes=30))
blob_url = f'https://{storage_account}.blob.core.windows.net/{container_name}/{blob_path}?{token}'
print(blob_url)
response = RedirectResponse(blob_url)
return response
我期望的是要执行的查询,返回响应后,下载将在后台或单独的选项卡中开始。相反,我得到的是一个不同的响应,正如您在 Swagger 中看到的那样:
我还查看了“网络”选项卡以查看该请求发生了什么:
看起来有一个 OPTIONS 请求,我假设我正在收到对该请求的响应。不确定这是否是 Swagger 处理请求的方式。知道这是怎么/为什么发生的以及如何解决它吗?谢谢!
【问题讨论】:
-
我明白你在说什么,OPTIONS 请求返回一个 File 响应,这就是它在 Swagger 中的原因。我的问题是为什么首先完成 OPTIONS 请求(我假设是因为重定向)但是为什么我想要重定向的那个 URL 不能简单地访问(比如当你点击一个 URL 来下载一些东西并且它开始下载时)。你是说不应该遵循重定向?
-
我感到困惑的是我试图实现的功能是访问 URL 以及 Swagger 发送到该 URL 的 OPTIONS 请求
标签: python redirect swagger fastapi swagger-ui