美文网首页
vue+axios+FormData上传多个文件

vue+axios+FormData上传多个文件

作者: 翔阿翔阿翔 | 来源:发表于2019-07-24 11:55 被阅读0次

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)

相关文章

网友评论

      本文标题:vue+axios+FormData上传多个文件

      本文链接:https://www.haomeiwen.com/subject/taztrctx.html