推荐答案
在 Flask 中处理文件上传可以通过 request.files 对象来实现。以下是一个简单的示例代码:
// www.javascriptcn.com code example
from flask import Flask, request, redirect, url_for
app = Flask(__name__)
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
# 检查是否有文件被上传
if 'file' not in request.files:
return 'No file part'
file = request.files['file']
# 如果用户没有选择文件,浏览器会提交一个空文件
if file.filename == '':
return 'No selected file'
# 保存文件到指定路径
file.save(f'uploads/{file.filename}')
return 'File uploaded successfully'
return '''
<!doctype html>
<title>Upload new File</title>
<h1>Upload new File</h1>
<form method=post enctype=multipart/form-data>
<input type=file name=file>
<input type=submit value=Upload>
</form>
'''
if __name__ == '__main__':
app.run(debug=True)本题详细解读
1. 文件上传的基本流程
在 Flask 中,文件上传通常通过 HTML 表单的 POST 请求来完成。表单的 enctype 属性必须设置为 multipart/form-data,这样才能正确传输文件数据。
2. 使用 request.files 获取文件
Flask 提供了一个 request.files 对象,它是一个字典,包含了所有通过表单上传的文件。每个文件都是一个 FileStorage 对象,可以通过 request.files['file'] 来获取。
3. 检查文件是否存在
在处理文件上传时,首先需要检查是否有文件被上传。可以通过 if 'file' not in request.files 来判断是否有文件被上传。如果没有文件被上传,可以返回一个错误信息。
4. 检查文件名是否为空
如果用户没有选择文件,浏览器会提交一个空文件。可以通过 if file.filename == '' 来判断文件名是否为空。如果为空,可以返回一个错误信息。
5. 保存文件
一旦确认文件存在且文件名不为空,可以通过 file.save() 方法将文件保存到指定路径。通常会将文件保存到服务器的某个目录中,例如 uploads/ 目录。
6. 返回成功信息
文件保存成功后,可以返回一个成功信息,告知用户文件上传成功。
7. HTML 表单
在 HTML 表单中,<input type="file"> 用于选择文件,<input type="submit"> 用于提交表单。表单的 method 属性必须设置为 post,并且 enctype 属性必须设置为 multipart/form-data。
8. 运行 Flask 应用
最后,通过 app.run(debug=True) 启动 Flask 应用,并开启调试模式,方便开发时查看错误信息。