美文网首页
七牛云 + element-ui 图片上传

七牛云 + element-ui 图片上传

作者: 彩虹_af2e | 来源:发表于2020-05-23 17:40 被阅读0次

废话不多说,先上代码

html 部分代码

  <div class="upload-container sigleImageUpload">
    <el-upload
      class="avatar-uploader"
      action="https://upload.qiniup.com"
      :data="qiniuData"
      accept=".jpg,.jpeg,.png,.JPG,.JPEG,.PNG"
      :show-file-list="false"
      :on-success="handleSuccess"
      :before-upload="beforeUpload"
    >
      <el-button v-else v-loading="loading" type="primary">点击上传</el-button>
    </el-upload>

说明:actions是七牛云的地址,上传到图片到七牛云需要携带,token和key值,这个需要通过后端接口获取,:data="qiniuData就是绑定这个数值,
主要思路: 在上传图片前beforeUpload,获取到token和key值,赋值到qiniuData

data 数据

    return {
      loading: false,
      qiniuData: {
        token: '',
        key: ''
      }
    }
  },

js部分代码

  // 上传图片之前获取token和key
   beforeUpload(file) {
      this.loading = true
      const _self = this
     // 由于获取数据是一个异步操作,所以此处用promise来处理
      return new Promise((resolve, reject) => {
       // getToken用来调用接口获取token 和key
        getToken({
          fileName: file.name  // 我们后端要求传递个图片名称过去
        }).then(res => {
          const Data = res.data.data
          if (res.data.code === 0) {
            _self.qiniuData.key = Data.key
            _self.qiniuData.token = Data.token
            resolve(true)
          } else {
            reject(false)
            this.loading = false
          }
        }).catch(err => {
          console.log(err)
          this.loading = false
          reject(false)
        })
      })
    },
   // 上传成功时的回调
  handleSuccess(data) {
      // data.url就是上传成功后返回的图片在七牛云地址
      console.log(data.url)  
 }

全部代码,我是封装成了一个组件,通过url与父组件双向数据绑定,当上传从后改变url父组件的url也改变了,就获取到了上传的图片地址

<template>
  <div class="upload-container sigleImageUpload">
    <el-upload
      class="avatar-uploader"
      action="https://upload.qiniup.com"
      :data="qiniuData"
      accept=".jpg,.jpeg,.png,.JPG,.JPEG,.PNG"
      :show-file-list="false"
      :on-success="handleSuccess"
      :before-upload="beforeUpload"
    >
      <!-- 展示上传成功后的图片-->
      <img v-if="url" :src="url">
      <el-button v-else v-loading="loading" type="primary">点击上传</el-button>
    </el-upload>
  </div>
</template>

<script>
//  获取token的api 
import { getToken } from '@/api/common.js'

export default {
  name: 'SingleImageUpload',
  props: {
    imgUrl: {
      type: String,
      default: ''
    },
  },
  data() {
    return {
      loading: false,
      qiniuData: {
        token: '',
        key: ''
      }
    }
  },
  computed: {
    url: {
      get() {
        return this.imgUrl
      },
      set(val) {
        this.$emit('update:imgUrl', val)
      }
    }
  },
  methods: {
    handleSuccess(data) {
      console.log(data)
      if (data.url) {
        this.url = data.url
      }
      this.loading = false
    },
    beforeUpload(file) {

      this.loading = true
      const _self = this
      return new Promise((resolve, reject) => {
        getToken({
          fileName: file.name
        }).then(res => {
          const Data = res.data.data
          if (res.data.code === 0) {
            _self.qiniuData.key = Data.key
            _self.qiniuData.token = Data.token
            resolve(true)
          } else {
            reject(false)
            this.loading = false
          }
        }).catch(err => {
          console.log(err)
          this.loading = false
          reject(false)
        })
      })
    }
  }
}
</script>




相关文章

网友评论

      本文标题:七牛云 + element-ui 图片上传

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