首页 > 其他分享 >vue实现剪贴图片上传

vue实现剪贴图片上传

时间:2022-10-25 13:44:29浏览次数:33  
标签:vue return 剪贴 上传 code file items data

<template>
  <div class="about">
    <div class="box">
      <div id="preview" class="upload-preview" v-on:paste="handlePaste">
      </div>
      <el-button v-on:click="uploadPlans" type="primary" style="margin-top:20px;">上传文件</el-button>
    </div>
  </div>
</template>
<script>
import axios from "axios";
export default {
  data() {
    return {};
  },
  methods: {
    handlePaste(event) {
      const items = (event.clipboardData || window.clipboardData).items;
      let file = null;

      if (!items || items.length === 0) {
        alert("当前浏览器不支持本地");
        return;
      }
      // 搜索剪切板items
      for (let i = 0; i < items.length; i++) {
        if (items[i].type.indexOf("image") !== -1) {
          file = items[i].getAsFile();
          break;
        }
      }
      if (!file) {
        alert("粘贴内容非图片");
        return;
      }
      // 此时file就是我们的剪切板中的图片对象
      // 如果需要预览,可以执行下面代码
      const reader = new FileReader();
      reader.onload = (event) => {
        preview.innerHTML = `<img src="${event.target.result}">`;
      };
      reader.readAsDataURL(file);
      this.file = file;
    },
    //上传文件成功后回调
    uploadPlans() {
      let file = this.file;
      if (!file) {
        alert("请粘贴图片后上传");
        return;
      }
      this.loading = true;
      //FormData转为二进制  利用append确定参数  可根据自己需要确认参数列表
      let form = new FormData();
      form.append("api", "file@upload");
      form.append("filename", file);
      //uploadCertificate是封装的axios请求,自己根据需求传参
      this.uploadCertificate(form)
        .then((data) => {
          console.log(data.code);
          if (data.code == 200) {
            alert("上传成功!");
          } else {
            alert("上传失败!");
          }
        })
        .catch(() => {});
    },
    uploadCertificate(formData) {
     //formData格式可以转为二进制
      return new Promise((resolve, reject) => {
        axios({
          method: "POST",
          url: "自己的url路径",
          headers: {
            "Content-Type": "multipart/form-data",
            token: "设置token",
          },
          data: formData,
        })
          .then((data) => {
            console.log(data);
            if ((data.data.code = 200)) {
              if (data.data) {
                resolve({
                  default:
                    "https://staticonline.superhub.com.cn/" +
                    data.data.data.img,
                  code: 200,
                });
              } else {
                reject(data.data.code);
              }
            }
          })
          .catch((e) => {
            console.log(e);
            reject();
          });
      });
    },
  },
};
</script>

<style lang="less" scoped>
.upload-preview {
  min-height: 150px;
  width: 400px;
  margin: auto;
  margin-top: 20px;
  image{
    width: 500px;
    height: 500px;
  }
}
.upload-preview:empty::before {
  border: 1px solid #ddd;
  content: "预览区";
  display: block;
  text-align: center;
  font-size: 40px;
  line-height: 150px;
  opacity: 0.6;
}
</style>

标签:vue,return,剪贴,上传,code,file,items,data
From: https://www.cnblogs.com/wx-self-it/p/16824592.html

相关文章

  • Vue笔记20 网络封装axios、模拟httpbin.org
                 ......
  • Vue笔记
    Vue一、 Vue基础1. Vue概述 Vue:渐进式JavaScript框架 声明式渲染->组件系统->客户端路由->集中式状态管理->项目构建 官网:https://cn.vuejs/org/v2/guide/2. Vue基本使用......
  • Vue笔记19 Vuex - Module
                                   ......
  • vue源码中的nextTick是怎样实现的
    一、Vue.nextTick内部逻辑在执行initGlobalAPI(Vue)初始化Vue全局API中,这么定义Vue.nextTick。functioninitGlobalAPI(Vue){//...Vue.nextTick=ne......
  • Vue3知识点之数据侦测
    Vue的核心之一就是响应式系统,通过侦测数据的变化,来驱动更新视图。实现可响应对象的方式通过可响应对象,实现对数据的侦测,从而告知外界数据变化。实现可响应对象的方式:g......
  • Vue3必会技巧-自定义Hooks
    Vue3自定义Hooks定义:个人理解:一些可复用的方法像钩子一样挂着,可以随时被引入和调用以实现高内聚低耦合的目标,应该都能算是hook;为什么Vue3要用自定义Hook?:结论:就是为了......
  • Vue笔记18 vueX npm install vuex --save 、Mutation
                                                重点:     ......
  • vue3 router 配置
     npminstallvue-router......
  • Springboot 一行代码实现文件上传 20个平台!少写代码到极致
    大家好,我是小富~技术交流,公众号:程序员小富又是做好人好事的一天,有个小可爱私下问我有没有好用的springboot文件上传工具,这不巧了嘛,正好我私藏了一个好东西,顺便给小伙伴......
  • 从0搭建vue3组件库: 如何完整搭建一个前端脚手架?
    相信大家在前端开发中都使用过很多前端脚手架,如vue-cli,create-vite,create-vue等;本篇文章将会为大家详细介绍这些前端脚手架是如何实现的,并且从零实现一个create-kitty脚手......