vue-cli项目中,配合element_ui来实现上传图片与视频到oss上。

<template>
    <div class="basicInfo">
      <el-upload class="avatar-content"
        v-loading="fileLoading"
        accept="image/*"
        drag action="https://zxcity-app.oss-cn-hangzhou.aliyuncs.com"
        :show-file-list="false"
        :data="ossParams"
        :before-upload="checkParams"
        :on-progress="progress"
        :on-error="uploadErr"
        :on-success="uploadSuccess"
        :on-remove="fileListRemove"
        multiple
        >
      </el-upload>
      <div v-for="(item,index) in fileList" :key="index" class="imgDiv">
        <img :src="item.imgUrl" alt="">
        <p>{{item.progress}}</p>
      </div>
    </div>
</template>
<script>
import axios from 'axios'
export default {
  data () {
    return {
      form: {
        url: ''
      },
      fileList: [],
      fileLoading: false,
      ossParams: {
        expireTime: '',
        key: '',
        dir: ''
      }
    }
  },
  methods: {
    // 图片上传前检测参数变化
    checkParams (file) {
      var _this = this
      var promise = new Promise((resolve, reject) => {
        axios.get('https://share.zxtest.izxcs.com/zxcity_restful/ws/oss/ossUpload', {})
          .then(function (response) {
            var params = response.data
            _this.ossParams = params
            _this.ossParams.name = file.name
            _this.ossParams.OSSAccessKeyId = params.accessid
            _this.ossParams.success_action_status = '200'
            _this.ossParams.key = params.dir + '/' + _this.getUUID()
            var obj = {
              name: _this.ossParams.name,
              key: _this.ossParams.key,
              host: _this.ossParams.host,
              progress: 0,
              imgUrl: ''
            }
            _this.fileList.push(obj)
            // _this.fileLoading = true
            resolve()
          })
          .catch(function (error) {
            console.log(error, '错误')
            reject(error)
          })
      })
      return promise
    },
    // 上传中
    progress (event, file, fileList) {
      console.log('上传中...')
      console.log(file)
      console.log(fileList)
      this.fileList.forEach((item, index) => {
        if (item.name === file.name) {
          item.progress = parseInt(file.percentage)
        }
      })
    },
    // 上传失败提示
    uploadErr (res) {
      this.$message.error('上传出错!')
    },
    // 上传成功后上传到file表
    uploadSuccess (response, file, fileList) {
      console.log('上传成功')
      this.fileList.forEach((item, index) => {
        if (item.name === file.name) {
          item.imgUrl = item.host + '/' + item.key
          item.progress = 100
        }
      })
    },
    // 文件删除
    fileListRemove (file, fileList) {
      this.form.url = ''
    },
    // 随机名称
    getUUID () {
      return `${this.str4()}${this.str4()}-${this.str4()}-${this.str4()}-${this.str4()}-${this.str4()}${this.str4()}${this.str4()}`
    },
    str4 () {
      return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
    }
  }
}
</script>
<style lang="less" scoped>
.imgDiv{
  display: block;
  float: left;
   80px;
  height: 100px;
  border: 2px solid black;
  img{
    display: block;
     50px;
    height: 80px;
  }
  p{
    font-size: 14px;
    text-align: center;
  }
}
</style>