element ui上传图片到七牛

<template>
  <div  v-loading.lock="loading" element-loading-text="拼命上传中...">
    <el-upload 
    v-if="canDelete"
    ref="upload"
    action="https://upload.qbox.me" 
    :show-file-list="showFileList" 
    :data="dataObj" 
    drag 
    :multiple="basicPackDefault.multiple"
    :before-upload="beforeUpload" 
    :on-success="uploadSuccess"
    :on-change="onChange"
    :auto-upload="true"
    :accept="basicPack.accept"
    :on-error="onError"
    >
      <i class="el-icon-upload"></i>
      <div class="el-upload__text">将文件拖到此处,或<em>点击选择图片</em></div>
    </el-upload>
    <el-button v-if="false" style="    margin-left: 10px;position: absolute;left: 230px;top: 30px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button> 
    <el-progress v-if="progress" :percentage="percentage" :status="status"></el-progress>
    <ul  class="el-upload-list el-upload-list--picture" :id="id" >
       <li  v-if="qiniuImage.image_uri&&qiniuImage.image_uri.length<=0">暂无图片列表</li>
       <template  v-for="(item, index) in qiniuImage.image_uri" >
          <li class="el-upload-list__item is-success"  v-if="item != '' " style="width:16%;margin-right:5px;display:inline-block;">
             <img :src="item" alt="" class="el-upload-list__item-thumbnail"  @click="Viewer" style="cursor:pointer">
             <template v-if="canDelete">
               <label  class="el-upload-list__item-status-label">
                       <i class="el-icon-upload-success el-icon-check"></i>
                     </label>
                     <i  class="el-icon-close" @click="delImg(index)"></i>
             </template>
          </li>
        </template>
    </ul>
  </div>
</template>
<script>


import { getToken } from '@/api/qiniu'
import { Message } from 'element-ui'
import store from '@/store'
import qiNiuPrefix from 'config/qiNiuPrefix.js'
import Viewer from "static/viewer/viewer.js"
//import $ from 'jquery'


// 获取七牛token 后端通过Access Key,Secret Key,bucket等生成token
// 七牛官方sdk https://developer.qiniu.com/sdk#official-sdk
var timer;
var viewer;
export default{
   mounted(){
    if(typeof(this.qiniuImage)=='string' ){
       this.qiniuImage={};
       this.qiniuImage.image_uri=this.qiniuImage.split(',')
    }
  },
  /*data(){     
    return{
      imageArr:[]
    }
  },*/  
  props:["qiniuImage",'packJson','canDelete','id'],
  computed: {
    basicPack: {
      get: function () {
        if(this.packJson){
          if(this.packJson.maxLength){
            this.basicPackDefault.maxLength=this.packJson.maxLength;
          }
          if(this.packJson.size){
            this.basicPackDefault.size=this.packJson.size;
          }
          if(this.packJson.accept){
            this.basicPackDefault.accept=this.packJson.accept;
          }
        }
        return this.basicPackDefault
      },
      set: function (v) {
        
      }
    }
  },
  data() { 
    return {
      dataObj: { token: '',key:"" },
      showFileList:false,
      basicPackDefault:{
        maxLength:9,   //最大图片数量
        multiple:true, //可否上传多张
        accept:"image/gif,image/jpeg,image/jpg,image/png",
        size:4
      },
      maxLengthPass:"false",
      //进度条参数
      progress:false,
      percentage:0,
      status:"",


      count:0,
      loading:false
      
    }
  },
  methods: {
    
    submitUpload() {
        this.$refs.upload.submit();
    },
    onError(){
      this.loading=false;
      getToken().then(response => { 
        const token = response.uptoken
        store.dispatch('SetQiNiuToken',token)
        //commit('SET_QINIUTOKEN', token)
        _self._data.dataObj.token = token 
        resolve(true)
      }).catch(err => {
        console.log(err)
        reject(false)
      })
      this.$message.error('哎呀,网络君打了下盹,请重新上传!');
    },
    onChange(file, fileList){
      if(file.status=="ready"){
        if(this.qiniuImage.image_uri.length+fileList.length>(this.basicPack.maxLength)){//fileList.length+
            this.maxLengthPass=false;
        }else{
            this.maxLengthPass=true;
        }
      }
    },
    beforeUpload(response, file, fileList) {
      //增加key可以上传相同的图片名称到七牛
      this.dataObj.key=Date.parse(new Date());
      this.loading=true;
      if(this.maxLengthPass){
          const isLtM = response.size / 1024 / 1024 < (this.basicPack.size);//图片大小
          if (!isLtM) {
            this.$message.error('上传图片大小不能超过'+(this.basicPack.size)+'MB!');
            this.loading=false;
            return isLtM
          }
          else{
            const _self = this
            return new Promise((resolve, reject) => {
              if(!store.getters.qiNiuToken){
                  getToken().then(response => { 
                    const token = response.uptoken
                    store.dispatch('SetQiNiuToken',token)
                    //commit('SET_QINIUTOKEN', token)
                    _self._data.dataObj.token = token 
                    resolve(true)
                  }).catch(err => {
                    console.log(err)
                    reject(false)
                  })
               }else{
                _self._data.dataObj.token = store.getters.qiNiuToken
                resolve(true)
               }
            })
          }
      }else{
          this.loading=false;
          this.$message.error('最多上传'+(this.basicPack.maxLength)+'张图片!');
          return false
      }
      
    },
    uploadSuccess(response, file, fileList){
      this.count++;
      this.qiniuImage.image_uri.push(qiNiuPrefix+response.key);
      if(this.count==fileList.length){
        this.count=0;
        this.$refs.upload.uploadFiles=[];
      }
      //this.$message.success('上传成功');
      this.$nextTick(()=>{
        if(this.count===0){
          this.loading=false;
        }
      })
      
    }
    //图片预览部分的js
    ,Viewer(){
      //document.getElementsByClassName('viewer-container')[0]
      if($('.viewer-container').length>0){
        var zIndex=document.getElementsByClassName('viewer-container')[0].style['z-index'];
        $('.viewer-close').click();


        //this.$message.warning('请先关闭上一层图片查看!');
        //return;
      };
      viewer=new Viewer(document.getElementById(this.id),{  
        fullscreen:false,
        hide: function (){  
          viewer.update();
          viewer.destroy()
          },
          show:function(){
            viewer.update();
          }
        });
      setTimeout(()=>{
        if(zIndex==-1){
          if(document.interchange){
            document.interchange();
          }
        }
      },1000)
    },
    delImg(index){
      var imageUrl = this.qiniuImage.image_uri;
      if ( imageUrl.length > 0) { 
        imageUrl.splice(index,1);
        this.$refs.upload
        this.$message({
              type: 'success',
              message: '删除成功!'
          });
      }
    }
  }
}


/**/
</script>
<style scoped  >
  @import './../../../static/viewer/viewer.styl';
</style>
<style>
  .el-upload-list--text{display: none!important;}
</style>

 

欢迎加群交流:897724635  更多视频教程资源分享给大家

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element-UI 是一个基于 Vue.js 的组件库,提供了丰富的 UI 组件和交互功能。要实现在 Element-UI上传图片到阿里云 OSS,可以按照以下步骤进行: 1. 安装依赖:首先,需要安装 `ali-oss` 和 `element-ui` 的相关依赖。可以使用 npm 或者 yarn 进行安装。 2. 配置阿里云 OSS:在阿里云 OSS 控制台创建一个 Bucket,并获取 AccessKeyId、AccessKeySecret、Bucket 名称和 Endpoint。 3. 创建上传组件:在 Vue 组件中,使用 Element-UI 的 `el-upload` 组件来实现图片上传功能。可以设置 `action` 属性为阿里云 OSS 的上传地址,`before-upload` 属性来处理上传前的逻辑。 4. 在上传前进行签名:在 `before-upload` 方法中,需要通过阿里云 OSS 的 SDK 进行签名操作,生成上传所需的参数。可以使用 `ali-oss` 库提供的 `put` 方法来进行签名。 5. 上传图片:在签名成功后,调用 `put` 方法将图片上传到阿里云 OSS。可以设置 `on-success` 属性来处理上传成功后的逻辑。 下面是一个简单的示例代码: ```vue <template> <el-upload action="https://your-bucket-name.oss-cn-hangzhou.aliyuncs.com" :before-upload="handleBeforeUpload" :on-success="handleUploadSuccess" > <el-button>点击上传</el-button> </el-upload> </template> <script> import OSS from 'ali-oss'; export default { methods: { async handleBeforeUpload(file) { const client = new OSS({ region: 'your-region', accessKeyId: 'your-access-key-id', accessKeySecret: 'your-access-key-secret', bucket: 'your-bucket-name', }); try { const result = await client.put(file.name, file); // 在这里可以处理上传成功后的逻辑 } catch (error) { // 处理上传失败的逻辑 } // 返回 false 可以阻止上传 return false; }, handleUploadSuccess(response) { // 处理上传成功后的逻辑 }, }, }; </script> ``` 请注意,上述代码中的 `your-region`、`your-access-key-id`、`your-access-key-secret` 和 `your-bucket-name` 需要替换为你自己的阿里云 OSS 相关信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值