我正在浏览这篇文章,我看到了API中用于上传的函数?
https://fastapi.tiangolo.com/tutorial/request-files/
没有dl选项。我是不是漏掉了什么?我希望为一个文件下载站点创建一个api。有没有我应该使用的不同的api?
from typing import List
from fastapi import FastAPI, Query
app = FastAPI()
PATH "some/path"
@app.get("/shows/")
def get_items(q: List[str] = Query(None)):
'''
Pass path to function.
Returns folders and files.
'''
results = {}
query_items = {"q": q}
entry = PATH + "/".join(query_items["q"]) + "/"
dirs = os.listdir(entry)
results["folders"] = [val for val in dirs if os.path.isdir(entry+val)]
results["files"] = [val for val in dirs if os.path.isfile(entry+val)]
results["path_vars"] = query_items["q"]
return results
下面是python获取路径文件和目录的示例代码,您可以将路径作为一个列表返回,并在循环中添加一个新条目,以便更深入地了解文件树。传递一个文件名应该会触发一个下载函数,但我似乎无法获得一个下载函数。
发布于 2020-05-26 17:36:26
这对我很有效
from starlette.responses import FileResponse
return FileResponse(file_location, media_type='application/octet-stream',filename=file_name)
这将下载文件名为
发布于 2021-03-02 02:15:32
由于我们讨论的是FastAPI,返回文件响应的正确方法在
他们的文档
,下面是代码片段:
from fastapi import FastAPI
from fastapi.responses import FileResponse
file_path = "large-video-file.mp4"
app = FastAPI()
@app.get("/")
def main():
return FileResponse(path=file_path, filename=file_path, media_type='text/mp4')
发布于 2020-03-18 10:42:53
我想通了,
from starlette.responses import FileResponse
@app.get("/shows/")
def get_items(q: List[str] = Query(None)):
'''
Pass path to function.
Returns folders and files.
'''
results = {}
query_items = {"q": q}
if query_items["q"]:
entry = PATH + "/".join(query_items["q"])
else:
entry = PATH
if os.path.isfile(entry):
return download(entry)
dirs = os.listdir(entry + "/")
results["folders"] = [
val for val in dirs if os.path.isdir(entry + "/"+val)]
results["files"] = [val for val in dirs if os.path.isfile(entry + "/"+val)]
results["path_vars"] = query_items["q"]
return results
def download(file_path):
"""
Download file for given path.
"""
if os.path.isfile(file_path):
return FileResponse(file_path)
# return FileResponse(path=file_path)
return None
我添加了这部分
from starlette.responses import FileResponse
if os.path.isfile(entry):
return download(entry)
允许您托管静态文件。但是出于某种原因,所有文件都以“下载”.extension的形式下载。如果您知道如何确保原始文件名,请让我知道。
https://stackoverflow.com/questions/60716529
复制相似问题