vue elementUi中uolad文件上传和v-viewer相结合实现图片的预览下载和删除功能

Posted bydansin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue elementUi中uolad文件上传和v-viewer相结合实现图片的预览下载和删除功能相关的知识,希望对你有一定的参考价值。

1.首先安装element ui 和 v-viewer(可以使用cnpm)

  npm i element-ui -S

  npm i v-viewer -S

2.全局配置element ui 和 v-viewer(main.js中)

  import ElementUI from ‘element-ui‘

  import ‘element-ui/lib/theme-chalk/index.css‘  
  Vue.use(ElementUI)

  import Viewer from ‘v-viewer‘
  import ‘viewerjs/dist/viewer.css‘
  Vue.use(Viewer, {
    defaultOptions: {
      zIndex: 9999
    }
  })

3.页面中使用

<template>
  <div>
    <el-upload action="action" ref="upload" list-type="picture-card" :auto-upload="false"
    accept=".jpg, .jpeg, .png, .gif, .bmp, .JPG, .JPEG, .PBG, .GIF, .BMP" > 
      <i slot="default" class="el-icon-plus"></i>
      <div style="width: 100%; height: 100%; text-align: center;" slot="file" slot-scope="{file}">
        <div style="width: 100%; height: 100%;" class="images" v-viewer="{movable: false}">
          <img style="max-width: 100%; max-height: 100%;" :src="file.url">
        </div>
        <span class="el-upload-list__item-actions">
          <span title="预览图片" class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)">
            <i class="el-icon-zoom-in"></i>
          </span>
          <span title="下载图片" class="el-upload-list__item-delete" @click="handleDownload(file)">
            <i class="el-icon-download"></i>
          </span>
          <span title="删除图片" class="el-upload-list__item-delete" @click="handleRemove(file)">
            <i class="el-icon-delete"></i>
          </span>
        </span>
      </div>
    </el-upload>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        action: ‘‘,
      };
    },
    methods: {
      // 预览
      handlePictureCardPreview(file) {
        for(let i = 0; i < this.$el.querySelectorAll(‘.images‘).length; i++) {
          if(file.url === this.$el.querySelectorAll(‘.images‘)[i].getElementsByTagName("img")[0].src) {
            const viewer = this.$el.querySelectorAll(‘.images‘)[i].$viewer;
            viewer.show();
            break;
          }
        }
      },
      // 下载
      handleDownload(file) {
        let a = document.createElement(‘a‘)
                  let image = new Image();
        // 解决跨域 Canvas 污染问题
        image.setAttribute("crossOrigin", "anonymous");
        image.onload = function() {
          let canvas = document.createElement("canvas");
          canvas.width = image.width;
          canvas.height = image.height;
          let context = canvas.getContext("2d");
          context.drawImage(image, 0, 0, image.width, image.height);
          let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据
          let a = document.createElement("a"); // 生成一个a元素
          let event = new MouseEvent("click"); // 创建一个单击事件
          a.download = file.name || "photo"; // 设置图片名称
          a.href = url; // 将生成的URL设置为a.href属性
          a.dispatchEvent(event); // 触发a的单击事件
        };
        image.src = file.url;
        this.$message({
          message: ‘图片下载成功‘,
          type: ‘success‘
        });
      },
      // 移除
      handleRemove(file) {
        this.$refs.upload.handleRemove(file);
      },
    }
  }
</script>

技术图片

 

 预览功能

技术图片

 

 下载功能

以上是关于vue elementUi中uolad文件上传和v-viewer相结合实现图片的预览下载和删除功能的主要内容,如果未能解决你的问题,请参考以下文章

基于Vue和ElementUI上传文件到阿里云OSS对象存储中

vue+axios+elementUI文件上传与下载

Vue:使用elementUI upload组件上传excel文件

javaweb VUE+ElementUI 文件上传 后端部分

ElementUI + Vue + Django 上传文件

ElementUI + Vue + Django 上传文件