vue-element-ui-文件上传ts版

一、vue-element-ui-文件上传组件【Upload】ts版
  • 场景

    • 在vue的项目中引用了element-ui,使用其上传文件的ui组件,调用后端接口,完成本地文件文件上传
  • 官网解释

    • https://element.eleme.io/#/zh-CN/component/upload
    • 重点是官网下的属性参数
  • 实现

    • 注册Upload的UI组件

    • 页面部分

      <template>
        <div>
          <h1>测试页面</h1>
          <el-upload
            class="upload-demo"
            ref="upload"
            action=""
            :http-request="uploadFile"
            :on-change="change"
            :auto-upload="false">
            <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
            <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
            <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
          </el-upload>
        </div>
      
      </template>
      
      • 这边只是简单的demo,如果需要更加复杂的自行改造,比如上传列表移出,样式改造等
    • ts逻辑部分

      <script lang="ts">
      
      import {
        Component, Vue,
      } from 'vue-property-decorator';
      
      import axios from 'axios';
      
      
        // 引入组件
        @Component({
          components: {
          }
        })
      // @Component
      export default class Test extends Vue {
        // 定义多文件数组
        private file4Upload: [];
      
        // 重写自定义提交
        uploadFile(file) {
          // 封装表单参数
          const formData = new FormData();
          formData.append('file', file.file);
          formData.append('userId', '123');
          formData.append('videoSeconds', '111');
          formData.append('videoWidth', '111');
          formData.append('videoHeight', '111');
      
          const config = {
            method: 'post', // 请求方式
            url: 'http://localhost:8081/video/upload', // 后端接口定义的请求的地址
            data: formData,
            headers: { 'Content-Type': 'multipart/form-data' }, // 配置header需要跟后端一致
          };
          // 提交请求
          axios(config);
        }
      
        // 如果是多文件上传可以使用该方案
        change(file) {
          // 文件流
          console.log(file.raw);
          this.file4Upload.push(file.raw);
        }
      
        // 按钮提交
        submitUpload() {
          this.$refs.upload.submit();
        }
      }
      </script>
      
      • axios未做封装,真实项目中,这部分需要单独封装处理
      • 核心部分看注释即可,多个文件流的获取,单文件流的获取
      • :http-request的触发时机是调用 this.$refs.upload.submit();才会触发
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值