美文网首页
iview上传多文件

iview上传多文件

作者: 黄金原野 | 来源:发表于2020-03-18 19:53 被阅读0次

iView自带的文件上传功能为Upload组件,基本用法参考文档upload

文档中的示例都是选择文件后,直接上传至action对应的后台接口。但在很多情况下,需要在选择一个或多个文件后,单击其他按钮进行上传,示例代码如下。
其中,:before-upload对应的方法需要设置为return false,阻止iview的默认上传。
通过upload按钮对应的方法开始文件上传。在多文件环境下,每次只能上传一文件,后台的upload()方法会被调用若干次。

<!-- html -->
<Upload
   ref="upload"
   multiple
   action="/upload"
   :before-upload="checkFiles"
  :on-success="handleSuccess"
  :on-error="handleError"
  :headers="headers"
>
       <Button icon="ios-cloud-upload-outline">Choose files</Button>
</Upload>
<Button @click="submitFiles">Upload</Button>
// js
submitFiles () {
  for (let i = 0; i < this.uploadFile.length; i++) {
    let item = this.uploadFile[i]
    // 此处可以设置headers
    this.$refs.upload.post(item);
}
// 处理正确提交的返回值
handleSuccess (res) {
    console.log('res: ', res)
    console.log('success!')
},
handleError (res) {
    console.log('upload error!')
    console.log('upload error: ', res)
},

如果不使用iview自带的上传功能,可选择使用axios上传文件。但需要注意,如果使用封装好的axios请求,可能会引发一些问题。

由于axios接口通常请求的都是json数据,封装后的axios请求可能会默认设置Content-Typeapplication/json,而文件上传需要的Content-Typemultipart/form-data.

new FormData()后,如果需要查看其值,需要使用formData.get(key)打印其内容,直接console.log(formData)是无内容的。

// js
import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'

Vue.use(VueAxios, axios)
export default {
  upload () {
     var formData = new FormData();
      //重点在这里 如果使用 var data = {}; data.inputfile=... 这样的方式不能正常上传
      formData.append('inputFile', this.uploadFile[0])
      console.log('form: ', formData.get('inputFile'))
      let headers = {headers: {'Content-Type': 'multipart/form-data;charset=UTF-8'}}
      Vue.axios.post('/upload', formData, headers).then(function(data){
          console.log(data);
      },function(err){
          console.log(err);
      })  
  }
}

相关文章

网友评论

      本文标题:iview上传多文件

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