关于原生Flask实现文件上传
上传配置
在这里我们设置上传文件夹地址、允许的文件扩展名、限制文件大小:
1 | app.config['UPLOAD_FOLDER'] = os.path.join(__file__, 'uploads') |
上传文件
简单来说,只有如下几个步骤:
- 创建一个上传表单:
1
2
3
4<form method="POST" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form> - 当按下提交键后,通过request对象上的files获取文件,和request获取表单值一样,使用input字段的name值获取:这个
1
file_upload = request.files.get("file") # 获取上传的文件
file_upload
就是上传的文件的对象,其有一些方法可以获取上传的文件的信息:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 获取上传文件的文件名
file_upload.filename
# 获取上传文件的内容
file_upload.seek(0)
file_upload.read() # 被read后,文件指针会指到最低,使用seek(0)将指针指到文件开头
file_upload.seek(0)
# 获取上传文件的大小
file_upload.seek(0)
len(file_upload.read()) # 计算文件内容大小,单位为字节
file_upload.seek(0)
# 获取上传文件的mimetype
file_upload.mimetype - 检查上传的文件
1
2def allowed_file(filename):
return "." in filename and filename.resplit(".", 1)[1] in ALLOWED_EXTENSIONS - 使用
save
方法保存文件,指定保存的地址及文件名:file.save(path + filename)
上传上来的文件可以通过file.filename
获取文件名。1
2if file_upload and allowed_file(file_upload.filename):
file_upload.save(os.path.join(app.config['UPLOAD_FOLDER'], file_upload.filename))
获取上传后的文件
配置一个函数来获取上传文件的url
1 | from flask import send_from_directory |
获取url:
1 | file_url = url_for("uploaded_file", filename=filename) |