当前位置: 主机百科 » 资源 » 技术 » 正文

Element ui中upload组件一次请求批量上传

Element ui是由饿了么团队推出的基于vue的前端库,功能非常强大,其中的upload组件可以轻松的实现前端通过点击或者拖拽上传文件。不过upload组件默认的批量上传却是逐项上传,也就是你一次批量选择5个文件,那么会发送5次请求来分别上传这5个文件。

那么Element ui中upload组件怎么实现一次请求批量上传呢?这就需要通过自定义http-request来覆盖默认的上传行为,实现自定义上传,具体代码如下:

1
  &lt;template&gt;  &nbsp; &lt;d2container&gt;  &lt;elupload  &nbsp;&nbsp; class=&quot;uploaddemo&quot;  &nbsp;&nbsp; ref=&quot;upload&quot;  &nbsp;&nbsp;&nbsp; action=&quot;&quot;  &nbsp;&nbsp;&nbsp; :httprequest=&quot;customUpload&quot;  &nbsp;&nbsp;&nbsp; :beforeupload=&quot;beforeFileUpload&quot;  &nbsp;&nbsp; :onpreview=&quot;handlePreview&quot;  &nbsp;&nbsp; :onremove=&quot;handleRemove&quot;  &nbsp;&nbsp;&nbsp; :onsuccess=&quot;handleSuccess&quot;  &nbsp;&nbsp; :filelist=&quot;fileList&quot;  &nbsp;&nbsp; :autoupload=&quot;false&quot;  &nbsp;&nbsp;&nbsp; accept=&quot;.dbf&quot;  &nbsp;&nbsp;&nbsp; multiple&gt;  &nbsp;&nbsp; &lt;elbutton slot=&quot;trigger&quot; size=&quot;small&quot; type=&quot;primary&quot;&gt;选取文件&lt;/elbutton&gt;  &nbsp;&nbsp; &lt;elbutton style=&quot;marginleft: 10px;&quot; size=&quot;small&quot; type=&quot;success&quot; @click=&quot;submitUpload&quot;&gt;上传到服务器&lt;/elbutton&gt;  &nbsp;&nbsp; &lt;!div slot=&quot;tip&quot; class=&quot;elupload__tip&quot;&gt;只能上传jpg/png文件,且不超过500kb&lt;/div&gt;&gt;  &lt;/elupload&gt;  &nbsp; &lt;/d2container&gt;  &lt;/template&gt;  &lt;script&gt;  &nbsp; export default {  &nbsp;&nbsp;&nbsp; data() {  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return {  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileList: [],  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileData: new FormData()  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };  &nbsp;&nbsp;&nbsp; },  &nbsp;&nbsp;&nbsp; methods: {  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; submitUpload() {  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.$refs.upload.submit();  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileUpload(this.fileData).then(response =&gt; {    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; })  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; beforeFileUpload(file){  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let extension=file.name.substring(file.name.lastIndexOf(&#39;.')+1);          const isDbf = extension === "dbf";          const isLt10M = file.size / 1024 / 1024 < 10          if (!isDbf) {            this.$message.error('上传的数据文件只能是dbf格式!');          }          if (!isLt10M) {            this.$message.error('上传的单个数据文件大小不能超过10MB!');          }          return isDbf && isLt10M;        },               handleRemove(file, fileList) {        },        handlePreview(file) {        },        handleSuccess(response,file, fileList) {          this.$message.success('上传成功')        },        customUpload(file) {          this.fileData.append('files[]', file.file)          return false        }      }    }    //引入axios    import request from '@/plugin/axios'    export function fileUpload(file) {      return request({        method: 'post',        url: 'http://localhost/api/import',        headers: {'Content-Type':'multipart/form-data'},        data: file      })    }  ipt>

代码说明:

1.配置自定义的http-request函数:

1
  :httprequest=&quot;customUpload&quot;

2.在data中添加一项参数:fileData,类型是FormData:

1
  fileData: new FormData()

3.实现customUpload方法,将上传文件信息拼接到fileData中。

1
  customUpload(file) {  &nbsp;&nbsp;this.fileData.append(&#39;files[]', file.file)    return false  }

4.定义axios异步上传方法:

1
  export function fileUpload(file) {  &nbsp;&nbsp;return request({  &nbsp;&nbsp;&nbsp;method: &#39;post',     url: 'http://localhost/api/import',     headers: {'Content-Type':'multipart/form-data'},     data: file    })    }

5.在submitUpload中调用4中定义的上传方法:

1
  submitUpload() {  &nbsp;&nbsp;this.$refs.upload.submit();  &nbsp;&nbsp;fileUpload(this.fileData).then(response =&gt; {  &nbsp;&nbsp;//console.log(response)    })  },

未经允许不得转载:主机百科 » Element ui中upload组件一次请求批量上传

相关文章