成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

試試 FastAPI 打造高效上傳/下載接口!

開發 后端
FastAPI 提供了原生支持異步文件讀取和返回,非常適合構建現代 Web API。相比 Flask、Django 等傳統框架,開發體驗更現代化,性能也更高。

在現代 Web 項目中,文件上傳與下載幾乎是所有后端開發者都繞不開的基礎功能,比如用戶頭像上傳、Excel 報表導出、圖片預覽等。

而你可能還在使用傳統的 Flask、Django 來處理這些接口 —— 今天我帶你用 FastAPI 實現一個更高效、更清晰的文件上傳與下載服務。

我們將實現以下功能:

  • 支持上傳任意文件
  • 自動生成唯一文件名,防止覆蓋沖突
  • 返回下載地址供前端訪問
  • 提供下載接口
  • 代碼結構清晰、可擴展性強

文件上傳與下載完整實現

我們先創建一個 api/file.py 文件模塊,封裝上傳和下載接口。

完整代碼如下:

import os
import uuid
from fastapi import APIRouter, File, UploadFile, HTTPException
from starlette.responses import FileResponse

# 模擬統一響應格式(可根據項目實際結構更換)
class Result:
    @staticmethod
    def ok(data):
        return {"code": 0, "msg": "success", "data": data}

# 創建路由對象
router = APIRouter(prefix="/file", tags=["文件上傳下載"])

# 文件保存路徑
UPLOAD_DIRECTORY = "uploads"
os.makedirs(UPLOAD_DIRECTORY, exist_ok=True)

@router.post("/upload", summary="上傳文件")
async def upload_file(file: UploadFile = File(...)):
    """
    上傳文件,返回唯一 key 和下載鏈接。
    """
    # 提取后綴,拼接唯一 key
    file_extension = os.path.splitext(file.filename)[1]
    file_key = f"{uuid.uuid4().hex}{file_extension}"
    file_path = os.path.join(UPLOAD_DIRECTORY, file_key)

    try:
        # 寫入磁盤
        with open(file_path, "wb") as f:
            content = await file.read()
            f.write(content)
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"文件保存失敗: {str(e)}")

    file_url = f"http://localhost:8800/file/download/{file_key}"
    return Result.ok({
        "key": file_key,
        "url": file_url
    })

@router.get("/download/{key}", summary="下載文件")
async def download_file(key: str):
    """
    根據 key 下載文件。
    """
    file_path = os.path.join(UPLOAD_DIRECTORY, key)
    if not os.path.exists(file_path):
        raise HTTPException(status_code=404, detail="文件不存在")
    return FileResponse(file_path, filename=key)

主程序注冊路由

在你的 main.py 中注冊路由模塊:

from fastapi import FastAPI
from api import file

app = FastAPI()
app.include_router(file.router)

啟動服務:

uvicorn main:app --reload --port 8800

測試效果

(1) 上傳文件

可以通過 Postman 或 curl 測試上傳:

curl -F "file=@test.png" http://localhost:8800/file/upload

返回:

{
  "code": 0,
  "msg": "success",
  "data": {
    "key": "aa3121df01954a0c830c591f317f5f59.png",
    "url": "http://localhost:8800/file/download/aa3121df01954a0c830c591f317f5f59.png"
  }
}

(2) 下載文件

瀏覽器訪問返回的 url 即可直接下載文件。

總結

FastAPI 提供了原生支持異步文件讀取和返回,非常適合構建現代 Web API。相比 Flask、Django 等傳統框架,開發體驗更現代化,性能也更高。

如果你還沒在項目中使用 FastAPI,這可能是一個非常合適的起點。短短幾十行代碼,就可以實現一個高效、優雅的文件上傳下載接口。

責任編輯:趙寧寧 來源: Ssoul肥魚
相關推薦

2025-04-11 10:13:00

數據庫APIFastAPI

2024-12-16 00:38:12

2025-02-24 09:30:00

日志系統系統開發

2010-06-23 11:41:00

高校企業高效數據中心

2009-05-05 13:19:53

戴爾高效企業

2010-02-22 15:00:47

2019-12-12 09:30:31

工具代碼開發

2015-02-11 16:34:49

微信SDK

2014-10-27 14:09:01

華為

2010-05-12 15:39:49

IT運維信息化建設北塔

2019-03-28 15:52:34

電子簽約SaaS上上簽

2025-02-25 09:50:21

Java 8Function編程

2014-08-04 13:37:28

戴爾

2012-04-26 16:18:57

SAP

2022-08-31 14:39:47

物聯網智慧城市大數據

2024-04-01 08:11:20

2015-11-18 16:56:15

2011-06-15 16:16:09

項目經理

2012-10-12 09:50:52

瑞友

2024-03-26 08:08:08

SpringBPMN模型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品在线观看一区二区三区 | 国产美女特级嫩嫩嫩bbb片 | 天天综合国产 | www国产成人免费观看视频,深夜成人网 | 一区二区电影 | 国产高清免费视频 | 日韩精品一区二区在线 | 视频1区 | 先锋资源站| 毛片软件 | 成人动漫一区二区 | 91在线免费视频 | 在线中文字幕视频 | 极品电影院 | 成人自拍视频 | 日韩精品一区二区三区久久 | 亚洲精品国产区 | 久久精品久久久 | 久久精品国产一区老色匹 | 国产成人精品一区二区三区在线 | 午夜丰满少妇一级毛片 | 欧美日韩美女 | 国产探花在线精品一区二区 | 男人av的天堂 | 人人干人人玩 | 美女张开腿露出尿口 | 亚洲精品欧美 | 国产精品久久久久久久一区探花 | 国产精品久久久久一区二区三区 | 日日日操 | 亚洲日日夜夜 | 久久精品久久久久久 | 日本三级播放 | 精品无码久久久久久国产 | 中文成人无字幕乱码精品 | 美国av毛片 | 亚洲高清视频一区二区 | 亚洲精品一级 | 亚洲午夜精品一区二区三区他趣 | 91亚洲一区 | 国产精品婷婷 |