You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI如何接收文件并以自定义名称(如随机字符串)保存?

FastAPI接收上传文件并自定义名称保存

当然可以,FastAPI结合UploadFile完全支持接收上传文件并以指定名称(比如随机字符串)保存,以下是具体实现步骤和代码示例:

核心实现思路

  1. 用UploadFile接收前端上传的文件
  2. 生成自定义文件名(这里用UUID生成唯一随机字符串,避免文件名冲突)
  3. 读取上传文件的内容,写入到指定路径的新文件中

完整代码示例

from fastapi import FastAPI, File, UploadFile
import uuid
import os
from pathlib import Path

app = FastAPI()

# 定义文件保存目录,不存在则创建
SAVE_DIR = "./uploaded_files"
Path(SAVE_DIR).mkdir(parents=True, exist_ok=True)

@app.post("/upload-file/")
async def upload_file(file: UploadFile = File(...)):
    # 生成随机文件名,保留原文件扩展名
    file_extension = os.path.splitext(file.filename)[1]
    random_filename = f"{uuid.uuid4()}{file_extension}"
    save_path = os.path.join(SAVE_DIR, random_filename)
    
    # 逐块读取文件内容并写入,适合大文件
    with open(save_path, "wb") as buffer:
        while chunk := await file.read(1024):
            buffer.write(chunk)
    
    return {
        "original_filename": file.filename,
        "saved_filename": random_filename,
        "save_path": save_path
    }

关键代码说明

  • 生成随机文件名:使用uuid.uuid4()生成唯一的随机字符串,搭配原文件的扩展名,既保证文件名不重复,又保留文件格式。
  • 文件写入方式:采用逐块读取(每次1024字节)的方式写入文件,避免一次性读取大文件导致内存占用过高。
  • 保存目录处理:用Path(SAVE_DIR).mkdir(...)确保保存目录存在,防止因目录不存在导致保存失败。

测试方法

启动FastAPI应用后,访问http://localhost:8000/docs,在/upload-file/接口处上传文件,即可看到返回的原文件名、保存后的随机文件名及保存路径。

内容的提问来源于stack exchange,提问作者user18862346

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:56:04