有没有一种通过FastAPI下载文件的方法?我们需要的文件位于Azure Datalake中,从湖中检索它们不是问题,但问题发生在我们尝试将从数据湖获取的字节下载到本地机器时。
我们已尝试使用FastAPI中的不同模块,如
在Flask中,这不是问题,并且可以按以下方式完成:
我们已尝试使用FastAPI中的不同模块,如
starlette.responses.FileResponse
和fastapi.Response
,但都没有成功。在Flask中,这不是问题,并且可以按以下方式完成:
from io import BytesIO
from flask import Flask
from werkzeug import FileWrapper
flask_app = Flask(__name__)
@flask_app.route('/downloadfile/<file_name>', methods=['GET'])
def get_the_file(file_name: str):
the_file = FileWrapper(BytesIO(download_file_from_directory(file_name)))
if the_file:
return Response(the_file, mimetype=file_name, direct_passthrough=True)
当使用有效的文件名运行时,文件会自动下载。在FastAPI中有相应的方式吗?
解决方案
经过更多的故障排除,我找到了一种方法来实现这个功能。
from fastapi import APIRouter, Response
router = APIRouter()
@router.get('/downloadfile/{file_name}', tags=['getSkynetDL'])
async def get_the_file(file_name: str):
# the_file object is raw bytes
the_file = download_file_from_directory(file_name)
if the_file:
return Response(the_file)
因为进行了大量的故障排除和长时间查阅文档,所以只需简单地将字节作为Response(the_file)
返回即可。