flask实现文件上传,路径写到sql表
时间: 2024-04-30 21:20:50 浏览: 215
首先,你需要在你的 Flask 应用中配置文件上传的路径。可以通过设置 `UPLOAD_FOLDER` 变量来实现:
```python
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = '/path/to/uploads'
```
接下来,你需要在你的 HTML 表单中添加一个文件上传字段。例如:
```html
<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
```
当用户提交表单时,你的 Flask 应用将会接收到一个文件对象。你可以将文件保存到你的上传文件夹中,并将文件路径存储到 SQL 表中。
下面是一个实现文件上传的示例代码:
```python
from flask import Flask, request, redirect, url_for
from werkzeug.utils import secure_filename
import os
import sqlite3
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = '/path/to/uploads'
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 限制上传文件大小为 16MB
app.config['ALLOWED_EXTENSIONS'] = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
# 检查上传文件是否存在
if 'file' not in request.files:
return redirect(request.url)
file = request.files['file']
# 如果用户没有选择文件,浏览器会发送一个没有文件名的表单字段。
if file.filename == '':
return redirect(request.url)
# 检查文件类型是否被允许
if not allowed_file(file.filename):
return redirect(request.url)
# 确保保存的文件名是安全的
filename = secure_filename(file.filename)
# 将文件保存到上传文件夹中
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
# 将文件路径写到 SQL 表中
conn = sqlite3.connect('example.db')
c = conn.cursor()
c.execute("INSERT INTO files (name, path) VALUES (?, ?)", (filename, os.path.join(app.config['UPLOAD_FOLDER'], filename)))
conn.commit()
conn.close()
return redirect(url_for('uploaded_file', filename=filename))
return '''
<!doctype html>
<html>
<head>
<title>Upload new File</title>
</head>
<body>
<h1>Upload new File</h1>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
</body>
</html>
'''
if __name__ == '__main__':
app.run(debug=True)
```
在上面的代码中,我们使用了 SQLite 作为数据库,并将文件名和文件路径存储在 `files` 表中。你可以根据你的需要使用其他的数据库。
阅读全文