vue 前端 图片粘贴上传

<template>
  <div>
    <el-input type="textarea" @paste.native.capture.prevent="pasting" v-model="textMsg" placeholder="请输入..."></el-input>
    <span v-for="item in  fileList" style="margin-left: 10px;">
      <img :src="baseUrl+item.fileName" alt="" style="width: 100px;" :data-source="baseUrl+item.fileName" v-viewer>
      <i @click="handleRemove(item.fileName,fileList)" class="el-icon-delete-solid"></i>
    </span>
  </div>
</template>

这是页面部分输入框和图片的显示,直接粘贴图片就可以显示了

一下是js部分,主要粘贴,删除和上传图片,有些东西要自己看着改一下

handleRemove(file, fileList) {
        console.log(file, fileList);
        for (let i in this.fileList) {
          if (file === this.fileList[i].fileName) {
            this.fileList.splice(i, 1);
            this.$message('删除成功')
            let arry = []
            let msg = this.textMsg
            arry.push(msg)
            arry.push(this.fileList)
            this.$emit("input", arry);
          }
        }
      },
      // 监听粘贴事件
      pasting(event) {
        let txt = event.clipboardData.getData('Text')
        console.log(event.clipboardData.getData('Text'))
        if (typeof (txt) == 'string') {
          this.textMsg += txt
        }
        let file = null
        const items = (event.clipboardData || window.clipboardData).items
        console.log(items)
        if (items.length) {
          for (let i = 0; i < items.length; i++) {
            if (items[i].type.indexOf('image') !== -1) {
              file = items[i].getAsFile()
              console.log(file)
              this.handleChange(file)
              if (!this.canUpload) {
                this.canUpload = !this.canUpload;
              }
              break
            }
          }
        }
      },
      // 上传
      handleChange(file, filelist) {
        console.log(file, filelist);
        let url = process.env.VUE_APP_BASE_API + '/common/upload'
        let token = {
          Authorization: "Bearer " + getToken()
        }
        console.log(file, filelist)
        let formData = new FormData()
        formData.append('file', file.raw || file)
        axios.post(
            url, formData, {
              headers: {
                'Content-type': 'multipart/form-data',
                bwToken: token
              }
            }
          ).then(res => {
            console.log(res, '1321312321')
            let obj = new Object();
            obj.url = res.data.url
            obj.fileName = res.data.fileName
            obj.name = res.data.fileName.split('/').slice(-1).join();
            this.fileList.push(obj)
            console.log(this.fileList)
            let arry = []
            let msg = this.textMsg
            arry.push(msg)
            arry.push(this.fileList)
            this.$emit("input", arry);
          })
          .catch(err => {
            console.log(err)
          })
      },

 完整代码,实现粘贴图片上传

<template>
  <div>
    <el-input type="textarea" @paste.native.capture.prevent="pasting" v-model="textMsg" placeholder="请输入..."></el-input>
    <span v-for="item in  fileList" style="margin-left: 10px;">
      <img :src="baseUrl+item.fileName" alt="" style="width: 100px;" :data-source="baseUrl+item.fileName" v-viewer>
      <i @click="handleRemove(item.fileName,fileList)" class="el-icon-delete-solid"></i>
    </span>
  </div>
</template>

<script>
  const axios = require('axios');
  import API_CONFIG from "../../../vue.config"

  import {
    getToken
  } from "@/utils/auth";

  export default {
    props: {
      List: {
        default: null,
      },
      text: {}
    },
    data() {
      return {
        textMsg: '',
        fileList: [],
        baseUrl: '',

      };
    },
    created() {
      this.textMsg = this.text
      this.baseUrl = API_CONFIG.devServer.proxy['/dev-api'].target

    },
    mounted() {
      this.fileList = []
      if (this.List) {
        for (let i = 0; i < this.List.length; i++) {
          this.fileList.push({
            name: this.List[i],
            url: this.List[i],
            fileName: this.List[i],
            response: {
              fileName: this.List[i]
            }
          })

        }
        console.log('回显的文件信息', this.fileList);
      }
    },
    watch: {
      text() {
        this.textMsg = this.text
      },
      List() {
        // console.log('List', this.List);
        this.fileList = []
        if (this.List) {
          for (let i = 0; i < this.List.length; i++) {
            this.fileList.push({
              name: this.List[i],
              url: this.List[i],
              fileName: this.List[i],

              response: {
                fileName: this.List[i]
              }
            })

          }
          console.log('回显的文件信息', this.fileList);
        }

      },
      textMsg() {
        let arry = []
        let msg = this.textMsg
        arry.push(msg)
        arry.push(this.fileList)
        this.$emit("input", arry);
      }
    },
    methods: {
      handleRemove(file, fileList) {
        console.log(file, fileList);
        for (let i in this.fileList) {
          if (file === this.fileList[i].fileName) {
            this.fileList.splice(i, 1);
            this.$message('删除成功')
            let arry = []
            let msg = this.textMsg
            arry.push(msg)
            arry.push(this.fileList)
            this.$emit("input", arry);
          }
        }
      },
      // 监听粘贴事件
      pasting(event) {
        let txt = event.clipboardData.getData('Text')
        console.log(event.clipboardData.getData('Text'))
        if (typeof (txt) == 'string') {
          this.textMsg += txt
        }
        let file = null
        const items = (event.clipboardData || window.clipboardData).items
        console.log(items)
        if (items.length) {
          for (let i = 0; i < items.length; i++) {
            if (items[i].type.indexOf('image') !== -1) {
              file = items[i].getAsFile()
              console.log(file)
              this.handleChange(file)
              if (!this.canUpload) {
                this.canUpload = !this.canUpload;
              }
              break
            }
          }
        }
      },
      // 上传
      handleChange(file, filelist) {
        console.log(file, filelist);
        let url = process.env.VUE_APP_BASE_API + '/common/upload'
        let token = {
          Authorization: "Bearer " + getToken()
        }
        console.log(file, filelist)
        let formData = new FormData()
        formData.append('file', file.raw || file)
        axios.post(
            url, formData, {
              headers: {
                'Content-type': 'multipart/form-data',
                bwToken: token
              }
            }
          ).then(res => {
            console.log(res, '1321312321')
            let obj = new Object();
            obj.url = res.data.url
            obj.fileName = res.data.fileName
            obj.name = res.data.fileName.split('/').slice(-1).join();
            this.fileList.push(obj)
            console.log(this.fileList)
            let arry = []
            let msg = this.textMsg
            arry.push(msg)
            arry.push(this.fileList)
            this.$emit("input", arry);
          })
          .catch(err => {
            console.log(err)
          })
      },
    }
  };

</script>
<style lang="scss" scoped>
  .main {
    margin: 50px 300px;
  }

  .upload-demo {
    margin-top: 30px;
  }

</style>

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值