vue+axios+FormData上传多个文件

html


注意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)

你可能感兴趣的:(vue+axios+FormData上传多个文件)