FastAPI如何接收文件并以自定义名称(如随机字符串)保存?
FastAPI接收上传文件并自定义名称保存
当然可以,FastAPI结合UploadFile完全支持接收上传文件并以指定名称(比如随机字符串)保存,以下是具体实现步骤和代码示例:
核心实现思路
- 用
UploadFile接收前端上传的文件 - 生成自定义文件名(这里用UUID生成唯一随机字符串,避免文件名冲突)
- 读取上传文件的内容,写入到指定路径的新文件中
完整代码示例
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
相关产品推荐
相关产品推荐

