偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

開發(fā) 后端
FastAPI 提供了原生支持異步文件讀取和返回,非常適合構(gòu)建現(xiàn)代 Web API。相比 Flask、Django 等傳統(tǒng)框架,開發(fā)體驗更現(xiàn)代化,性能也更高。

在現(xiàn)代 Web 項目中,文件上傳與下載幾乎是所有后端開發(fā)者都繞不開的基礎(chǔ)功能,比如用戶頭像上傳、Excel 報表導(dǎo)出、圖片預(yù)覽等。

而你可能還在使用傳統(tǒng)的 Flask、Django 來處理這些接口 —— 今天我?guī)阌?nbsp;FastAPI 實現(xiàn)一個更高效、更清晰的文件上傳與下載服務(wù)。

我們將實現(xiàn)以下功能:

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

文件上傳與下載完整實現(xiàn)

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

完整代碼如下:

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

# 模擬統(tǒng)一響應(yīng)格式(可根據(jù)項目實際結(jié)構(gòu)更換)
class Result:
    @staticmethod
    def ok(data):
        return {"code": 0, "msg": "success", "data": data}

# 創(chuàng)建路由對象
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):
    """
    根據(jù) 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)

啟動服務(wù):

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 即可直接下載文件。

總結(jié)

FastAPI 提供了原生支持異步文件讀取和返回,非常適合構(gòu)建現(xiàn)代 Web API。相比 Flask、Django 等傳統(tǒng)框架,開發(fā)體驗更現(xiàn)代化,性能也更高。

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

責(zé)任編輯:趙寧寧 來源: Ssoul肥魚
相關(guān)推薦

2025-04-11 10:13:00

數(shù)據(jù)庫APIFastAPI

2024-12-16 00:38:12

2025-02-24 09:30:00

日志系統(tǒng)系統(tǒng)開發(fā)

2010-06-23 11:41:00

高校企業(yè)高效數(shù)據(jù)中心

2009-05-05 13:19:53

戴爾高效企業(yè)

2010-02-22 15:00:47

2019-12-12 09:30:31

工具代碼開發(fā)

2015-02-11 16:34:49

微信SDK

2014-10-27 14:09:01

華為

2010-05-12 15:39:49

IT運維信息化建設(shè)北塔

2019-03-28 15:52:34

電子簽約SaaS上上簽

2025-02-25 09:50:21

Java 8Function編程

2024-04-01 08:11:20

2014-08-04 13:37:28

戴爾

2012-04-26 16:18:57

SAP

2022-08-31 14:39:47

物聯(lián)網(wǎng)智慧城市大數(shù)據(jù)

2015-11-18 16:56:15

2011-06-15 16:16:09

項目經(jīng)理

2012-10-12 09:50:52

瑞友

2024-03-26 08:08:08

SpringBPMN模型
點贊
收藏

51CTO技術(shù)棧公眾號