flask上传文件以及常见问题
- 一、flask文档上传文件的介绍
- 二、上传文件的实现
- 2.1、生成一个from表单,用来提交图片
- 2.2、编写上传的逻辑
- 三、运行代码、以及常见异常
- 四、写在最后
一、flask文档上传文件的介绍
Flask上传文件的文档介绍,文件上传的基本思想实际上非常简单。它基本上是这样工作的:
-
1、一个
<form>
标签用enctype = multipart / form-data
标记,<input type = file>
放在那个表格中。 -
2、应用程序从请求对象上的:attr:
~flask.request.files
字典访问该文件。 -
3、使用 save() 方法将文件永久保存在文件系统的某个位置。
切记1:在将文件直接存储到文件系统之前,一定要使用secure_filename()
函数来保护文件名。
切记2:一定要限制上传文件的扩展
二、上传文件的实现
2.1、生成一个from表单,用来提交图片
在同级别下的templates
目录下,新建一个upload.html
文件,代码如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>上传文件</title>
</head>
<body><form action="" method="post" enctype="multipart/form-data"><table><tr><td>头像:</td><td><input type="file" name="file"></td></tr><tr><td></td><td><input type="submit" value="提交"></td></tr></table></form></body>
</html>
2.2、编写上传的逻辑
在upload.py文件中,编写上传的逻辑,代码如下:
from flask import Flask, render_template, request, send_from_directory
from werkzeug.utils import secure_filename
import os
import uuidapp = Flask(__name__)# 设置文件上传保存路径
app.config['UPLOAD_FOLDER'] = 'static/uploads/'
# MAX_CONTENT_LENGTH设置上传文件的大小,单位字节
app.config['MAX_CONTENT_LENGTH'] = 1 * 1024 * 1024@app.route('/', methods = ['GET'])
def hell():return '翻倍阿'@app.route('/upload', methods=['GET', 'POST'])
def upload():# 如果是get请求响应上传视图,post请求响应上传文件if(request.method == 'GET'):return render_template('upload.html')else:if 'file' not in request.files:return 'No file part'file = request.files['file']if file.filename == '':return 'No selected file'fname = secure_filename(file.filename)ext = fname.rsplit('.')[-1]# # 生成一个uuid作为文件名fileName = str(uuid.uuid4()) + "." + ext# return fileName# # os.path.join拼接地址,上传地址,f.filename获取文件名static_upload_path = app.config['UPLOAD_FOLDER']if not os.path.exists(static_upload_path):os.makedirs(static_upload_path)file.save(os.path.join(app.config['UPLOAD_FOLDER'], fileName))return 'ok'# 图片下载
@app.route('/download/<filename>', methods=['GET'])
def download(filename):if request.method == "GET":#通过文件名下载文件# return os.path.join(app.config['UPLOAD_FOLDER'], filename)path = os.path.isfile(os.path.join(app.config['UPLOAD_FOLDER'], filename))# return {# 'is_file' :path# }if path:return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)if __name__ == '__main__':app.run(debug=True)
要是想限制上传文件的类型,可以参考文档上的:
三、运行代码、以及常见异常
运行以后,是这样的:
若是选中文件提交以后,出现异常
这里需要确保保存文件的目录真实存在,且有权限,所以为了避免该问题,最好在代码中判断一下目录是否存在
if not os.path.exists(static_upload_path):os.makedirs(static_upload_path)
下一篇:python中判断目录是否存在的方法
四、写在最后
宣传一波:大家若是有人想北京租房可以联系我,主要是物资学院、通州北关、北苑、草房的房子。(注:我不是中介哟,我也不打算转行做中介,是我靠谱的朋友在做)