html
<input id="upload_file" type="file" multiple @change="v_upload_files"/>
注意input file 是不支持v-model的,因为v-model是双向数据绑定,而input file里面的文件只能通过点击选取来进行变更。所以这里只能用@change事件来触发上传
js
v_upload_files(e) {
let files = e.target.files
let formData = new FormData()
// formData重复的往一个值添加数据并不会被覆盖掉,可以全部接收到,可以通过formData.getAll('files')来查看所有插入的数据
for (let i = 0;i < files.length;i++) {
formData.append('files', files[i])
}
let url = '/files/uploadfiles'
let headers = {
'Content-Type': 'multipart/form-data'
}
axios.post(url, formData, {headers: headers})
}
需要注意的是请求头需要设置为'Content-Type': 'multipart/form-data'
后台python
files = self.request.files.get('files', None)
if files is not None:
for item in files:
# 设定一个存储路径来保存上传的文件
file_path = os.path.join('static', 'download_file', uid)
# 判断这个路径是否存在,如果不存在则创建该路径
if (os.path.exists(file_path) is not True):
os.makedirs(file_path)
# 拼接文件名,得到文件的路径
file_path = os.path.join(file_path, item.filename)
# 将文件写入到目标路径
with open(file_path, 'wb+') as f:
f.write(item.body)