python flask 上传图片,保存在服务器的upload目录下,图片地址保存数据库(mysql)中,每行代码详细注释
时间: 2024-09-18 16:16:34 浏览: 110
在Python Flask框架中处理文件上传并将其保存到服务器的`uploads`目录下,并将图片URL存储到MySQL数据库中,通常需要几个关键步骤。这里是一个简化的示例,包括文件接收、存储、数据库操作以及异常处理:
```python
# 引入必要的库
from flask import Flask, request, redirect, url_for, flash
import os
import mysql.connector
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads/' # 设置上传文件夹路径
app.config['SECRET_KEY'] = 'your_secret_key' # 对Flask-SQLAlchemy加密秘钥,用于安全连接
# 数据库连接设置
db_config = {
'host': 'your_host',
'user': 'your_user',
'password': 'your_password',
'database': 'your_database'
}
cnx = mysql.connector.connect(**db_config)
cursor = cnx.cursor()
@app.route('/upload', methods=['POST']) # 定义一个接收POST请求的路由
def upload_image():
if 'file' not in request.files: # 检查是否有文件被上传
flash('No file part') # 如果没有文件,则显示错误消息
return redirect(url_for('index')) # 返回主页
file = request.files['file']
if file.filename == '':
flash('No selected file') # 文件名为空,提示选择文件
return redirect(url_for('index'))
try:
filename = secure_filename(file.filename) # 使用安全文件名函数防止潜在攻击
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) # 保存文件到指定目录
# 将文件信息插入数据库
sql_query = """
INSERT INTO images (filename, image_url)
VALUES (%s, %s);
"""
cursor.execute(sql_query, (filename, f'/uploads/{filename}')) # 图片URL格式化为相对路径
cnx.commit() # 提交数据库事务
flash('Image uploaded successfully!') # 显示成功消息
return redirect(url_for('index')) # 返回主页
except Exception as e:
flash(f"Error occurred: {str(e)}") # 处理异常并显示错误信息
return redirect(url_for('index'))
@app.route('/')
def index():
# 可能的页面内容,例如展示已上传图片列表或其他页面结构
pass
# 确保关闭数据库连接
cnx.close()
if __name__ == '__main__':
app.run(debug=True) # 开启调试模式,用于本地开发环境
```
这个例子中,你需要先创建一个名为`images`的表,在MySQL数据库中,包含`id`, `filename`, 和 `image_url` 字段。
**注意**: 这里的代码示例并未涵盖数据库的建立和表结构创建部分,实际应用中还需要在项目开始时配置好数据库连接,并创建相应的表格结构。同时,使用`secure_filename()`是为了避免文件名中的非法字符导致的安全问题,可以根据实际情况调整。此外,为了生产环境安全,建议使用ORM库如SQLAlchemy来管理数据库操作。
阅读全文