如何使用Python实现文件存至文件系统并将路径存储到数据库(不使用Django)
不依赖Django实现Base64图片存储到文件系统+数据库方案
实现思路
先拆解原Django方案的核心逻辑,不依赖框架手动实现4个核心步骤即可:
- 解析base64编码的图片内容并解码为二进制数据
- 生成不重复的图片文件名,自动创建存储目录(目录不存在时)
- 将二进制图片写入本地文件系统,得到文件存储路径
- 把文件路径和其他业务字段一同写入数据库
完整实现代码
1. 图片存储工具函数(替换原Django版utils.py)
全部使用Python标准库实现,无需安装第三方依赖:
import base64 import uuid import os # 配置图片存储目录,和原Django的upload_to='charts'逻辑对应 IMAGE_SAVE_DIR = "./charts" def get_report_image(base64_data): # 拆分base64头和实际编码内容 _, img_content = base64_data.split(';base64, ') # 解码为二进制图片数据 decoded_img = base64.b64decode(img_content) # 生成唯一文件名,和原逻辑一致取UUID前12位加png后缀 img_name = f"{str(uuid.uuid4())[:12]}.png" # 存储目录不存在则自动创建 if not os.path.exists(IMAGE_SAVE_DIR): os.makedirs(IMAGE_SAVE_DIR) # 拼接跨平台的完整存储路径 save_path = os.path.join(IMAGE_SAVE_DIR, img_name) # 写入二进制数据到本地文件 with open(save_path, "wb") as f: f.write(decoded_img) # 返回存储路径,用于后续存入数据库 return save_path
2. 数据库操作示例(替换原Django ORM逻辑)
这里用Python自带的sqlite3做演示,无需额外安装数据库,你也可以替换为MySQL、PostgreSQL等其他数据库对应的驱动:
import sqlite3 from datetime import datetime # 初始化数据库连接 conn = sqlite3.connect("your_database.db") cursor = conn.cursor() # 创建Report表,字段和你原Django模型完全对应 create_table_sql = """ CREATE TABLE IF NOT EXISTS report ( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(120) NOT NULL, image VARCHAR(255), remarks TEXT NOT NULL, created DATETIME DEFAULT CURRENT_TIMESTAMP, updated DATETIME DEFAULT CURRENT_TIMESTAMP, author_id INTEGER NOT NULL ) """ cursor.execute(create_table_sql) conn.commit() # 插入数据示例,对应原Report.objects.create逻辑 # 假设你拿到的base64编码图片存在变量base64_encoded_image中 img_save_path = get_report_image(base64_encoded_image) insert_sql = """ INSERT INTO report (name, image, remarks, author_id, updated) VALUES (?, ?, ?, ?, ?) """ current_time = datetime.now() cursor.execute(insert_sql, ( "report name", img_save_path, "Report Remarks", 1, # 替换为实际的用户ID,对应原来的request.user.id current_time )) conn.commit() # 操作完成关闭连接 cursor.close() conn.close()
注意事项
- 如果需要使用其他数据库,只需替换sqlite3为对应的驱动(比如pymysql对应MySQL),SQL语法基本通用,仅需微调字段类型
- 可以根据需要添加异常捕获逻辑,比如base64格式校验、文件写入权限判断、数据库操作异常回滚等
- 生产环境建议配置合理的存储路径,避免目录权限问题
内容的提问来源于stack exchange,提问作者KHAN
相关产品推荐
相关产品推荐

