美文网首页
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