首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用fastapi下载文件

使用fastapi下载文件
EN

Stack Overflow用户
提问于 2020-03-17 13:07:09
回答 3查看 16.2K关注 0票数 13

我正在浏览这篇文章,我看到了API中用于上传的函数?

https://fastapi.tiangolo.com/tutorial/request-files/

没有dl选项。我是不是漏掉了什么?我希望为一个文件下载站点创建一个api。有没有我应该使用的不同的api?

代码语言:javascript
运行
复制
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获取路径文件和目录的示例代码,您可以将路径作为一个列表返回,并在循环中添加一个新条目,以便更深入地了解文件树。传递一个文件名应该会触发一个下载函数,但我似乎无法获得一个下载函数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-26 17:36:26

这对我很有效

代码语言:javascript
运行
复制
from starlette.responses import FileResponse

return FileResponse(file_location, media_type='application/octet-stream',filename=file_name)

这将下载文件名为

票数 23
EN

Stack Overflow用户

发布于 2021-03-02 02:15:32

由于我们讨论的是FastAPI,返回文件响应的正确方法在

他们的文档

,下面是代码片段:

代码语言:javascript
运行
复制
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')
票数 8
EN

Stack Overflow用户

发布于 2020-03-18 10:42:53

我想通了,

代码语言:javascript
运行
复制
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

我添加了这部分

代码语言:javascript
运行
复制
from starlette.responses import FileResponse
if os.path.isfile(entry):
    return download(entry)

允许您托管静态文件。但是出于某种原因,所有文件都以“下载”.extension的形式下载。如果您知道如何确保原始文件名,请让我知道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60716529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档