广告
返回顶部
首页 > 资讯 > 精选 >vue-cropper组件如何实现图片切割上传
  • 735
分享到

vue-cropper组件如何实现图片切割上传

2023-06-15 06:06:23 735人浏览 独家记忆
摘要

小编给大家分享一下Vue-cropper组件如何实现图片切割上传,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vue-cropper在vue中的引入1、组件内引入

小编给大家分享一下Vue-cropper组件如何实现图片切割上传,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

vue-cropper在vue中的引入

1、组件内引入

import { VueCropper }  from 'vue-cropper' components: {  VueCropper,},

2、全局引入

在main.js中配置如下代码

import VueCropper from 'vue-cropper' Vue.use(VueCropper)

3、使用示例

vue文件

<template>  <el-dialog    title="编辑头像"    :visible.sync="dialogFORMVisible"    :close-on-click-modal="false"    append-to-body  >    <label class="btn" for="uploads">选择图片</label>    <input      type="file"      id="uploads"      :value="imgFile"            accept="image/png, image/jpeg, image/gif, image/jpg"      @change="uploadImg($event, 1)"    >    <div >      <div class="show-preview" :>        <div : class="preview" >          <img :src="previews.url" :>        </div>      </div>    </div>    <div class="cut">      <vueCropper        ref="cropper"        :img="option.img"        :outputSize="option.size"        :outputType="option.outputType"        :info="true"        :full="option.full"        :canMove="option.canMove"        :canMoveBox="option.canMoveBox"        :original="option.original"        :autoCrop="option.autoCrop"        :autoCropWidth="option.autoCropWidth"        :autoCropHeight="option.autoCropHeight"        :fixedBox="option.fixedBox"        @realTime="realTime"        @imgLoad="imgLoad"      ></vueCropper>    </div>    <div slot="footer" class="dialog-footer">      <el-button @click="dialogFormVisible = false" size="small">取 消</el-button>      <el-button type="primary" @click="finish('blob')" size="small">确 定</el-button>    </div>  </el-dialog></template><script>import { VueCropper } from "vue-cropper";export default {  components: {    VueCropper  },  data() {    return {      previews: {},      model: false,      modelSrc: "",      fileName: "",      imgFile: "",      dialogFormVisible: false,      option: {        img: "",        outputSize: 1, //剪切后的图片质量(0.1-1)        full: false, //输出原图比例截图 props名full        outputType: "png",        canMove: true,        original: false,        canMoveBox: true,        autoCrop: true,        autoCropWidth: 40,        autoCropHeight: 40,        fixedBox: true      }    };  },  methods: {    //上传图片(点击上传按钮)    finish(type) {      let selft = this;      let formData = new FormData();      // 输出      if (type === "blob") {        selft.$refs.cropper.getCropBlob(data => {          let img = window.URL.createObjectURL(data);          selft.model = true;          selft.modelSrc = img;          formData.append("file", data, selft.fileName);          selft.$api.writer.userUpload(formData, r => {            if (r.code) {              selft.$alert.error(r.msg);            } else {              selft.$message({                message: r.data.msg,                type: "success"              });              selft.$store.state.userInfo = r.data.data;              selft.dialogFormVisible = false;            }          });        });      } else {        this.$refs.cropper.getCropData(data => {});      }    },    //选择本地图片    uploadImg(e, num) {      console.log("uploadImg");      var selft = this;      //上传图片      var file = e.target.files[0];      selft.fileName = file.name;      if (!/\.(gif|jpg|jpeg|png|bmp|GIF|JPG|PNG)$/.test(e.target.value)) {        alert("图片类型必须是.gif,jpeg,jpg,png,bmp中的一种");        return false;      }      var reader = new FileReader();      reader.onload = e => {        let data;        if (typeof e.target.result === "object") {          // 把Array Buffer转化为blob 如果是base64不需要          data = window.URL.createObjectURL(new Blob([e.target.result]));        } else {          data = e.target.result;        }        if (num === 1) {          selft.option.img = data;        } else if (num === 2) {          selft.example2.img = data;        }      };      // 转化为base64      // reader.readAsDataURL(file)      // 转化为blob      reader.readAsArrayBuffer(file);    },    show() {      this.dialogFormVisible = true;    },    // 实时预览函数    realTime(data) {      console.log("realTime");      this.previews = data;    },    imgLoad(msg) {      console.log("imgLoad");      console.log(msg);    }  }};</script><style lang="less">@import "./userLoGo.less";</style>

less文件

.cut {    width: 300px;    height: 300px;    margin: 0px auto;}.hh {    .el-dialog__header {        padding: 0px;        line-height: 2;        background-color: #f3f3f3;        height: 31px;        border-bottom: 1px solid #e5e5e5;        background: #f3f3f3;        border-top-left-radius: 5px;        border-top-right-radius: 5px;    }    .el-dialog__title {        float: left;        height: 31px;        color: #4c4c4c;        font-size: 12px;        line-height: 31px;        overflow: hidden;        margin: 0;        padding-left: 10px;        font-weight: bold;        text-shadow: 0 1px 1px #fff;    }    .el-dialog__headerbtn {        position: absolute;        top: 8px;        right: 10px;        padding: 0;        background: 0 0;        border: none;        outline: 0;        cursor: pointer;        font-size: 16px;    }}.btn {    display: inline-block;    line-height: 1;    white-space: nowrap;    cursor: pointer;    background: #fff;    border: 1px solid #c0ccda;    color: #1f2d3D;    text-align: center;    box-sizing: border-box;    outline: none;    //margin: 20px 10px 0px 0px;    padding: 9px 15px;    font-size: 14px;    border-radius: 4px;    color: #fff;    background-color: #50bfff;    border-color: #50bfff;    transition: all 0.2s ease;    text-decoration: none;    user-select: none;}.show-preview {    flex: 1;    -WEBkit-flex: 1;    display: flex;    display: -webkit-flex;    justify-content: center;    -webkit-justify-content: center;    .preview {        overflow: hidden;        border-radius: 50%;        border: 1px solid #cccccc;        background: #cccccc;    }}

发送请求的时候配置axiOS的Content-Type

// Http request 拦截器axios.interceptors.request.use(  config => {debugger    let token = sessionStorage.getItem('token')    if (token) {      config.headers.Authorization = token;    }    if (config && config.url && config.url.indexOf('upload') > 0) {      config.headers['Content-Type'] = 'multipart/form-data'    }    return config  },  err => {    return Promise.reject(err)  })

boot的controller

@RequestMapping("/upload") public ResultData upload(@RequestParam("file") MultipartFile file) {  return userService.upload(file); }

boot的service

@Override public ResultData upload(MultipartFile file) {  if (!file.isEmpty()) {      StringBuffer requestURL = sessionUtil.getRequestURL();   int end = requestURL.indexOf("/user/upload");   String basePath = requestURL.substring(0, end);   String savePath = basePath + "/static/img/logo/";   // 获取文件名称,包含后缀   String fileName = file.getOriginalFilename();   String saveDbPath = savePath + fileName;   // 存放在这个路径下:该路径是该工程目录下的static文件下:(注:该文件可能需要自己创建)   // 放在static下的原因是,存放的是静态文件资源,即通过浏览器输入本地服务器地址,加文件名时是可以访问到的   String path = ClassUtils.getDefaultClassLoader().getResource("").getPath() + "static/img/logo/";   // 该方法是对文件写入的封装,在util类中,导入该包即可使用,后面会给出方法   try {    FileUtil.fileupload(file.getBytes(), path, fileName);    // 接着创建对应的实体类,将以下路径进行添加,然后通过数据库操作方法写入    User user = sessionUtil.getSessionUser();    user.setLogo(saveDbPath);    User whereUser = new User();    whereUser.setId(user.getId());    ConfigHelper.upate(user, "user", whereUser);    Map<String, Object> map = new HashMap<>();    map.put("msg", "头像修改成功");    map.put("data", user);    return ResultData.ok(map);   } catch (IOException e) {    log.error("图片上传==》" + e.getMessage());    e.printStackTrace();    return ResultData.failed(e.getMessage());   } catch (Exception e) {    log.error("图片上次==》" + e.getMessage());    e.printStackTrace();    return ResultData.failed(e.getMessage());   }  } else {   return ResultData.failed("上传图片失败");  } }

以上是“vue-cropper组件如何实现图片切割上传”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: vue-cropper组件如何实现图片切割上传

本文链接: https://www.lsjlt.com/news/278329.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue-cropper组件实现图片切割上传
    本文实例为大家分享了vue-cropper组件实现图片切割上传的具体代码,供大家参考,具体内容如下 这几日,等来了些空闲,用vue和spring boot实践一次头像上传,因此记下...
    99+
    2022-11-12
  • vue-cropper组件如何实现图片切割上传
    小编给大家分享一下vue-cropper组件如何实现图片切割上传,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vue-cropper在vue中的引入1、组件内引入...
    99+
    2023-06-15
  • vue-cropper插件实现图片截取上传组件封装
    基于vue-cropper插件实现图片截取上传组件封装的具体代码,供大家参考,具体内容如下 需求场景: 后台开发需要上传图片并进行相应比例尺寸图片的截取,本组件开发采用Ant Des...
    99+
    2022-11-12
  • vue-cropper插件如何实现图片截取上传组件封装
    小编给大家分享一下vue-cropper插件如何实现图片截取上传组件封装,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!需求场景:后台开发需要上传图片并进行相应比例尺寸图片的截取,本组件开发采用Ant Design Vue组...
    99+
    2023-06-15
  • vue如何实现上传图片组件
    这篇文章给大家分享的是有关vue如何实现上传图片组件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。未上传状态上传状态其他状态(查看/删除)自定义组件文件名称 - 这里叫UploadImg.vue<templ...
    99+
    2023-06-25
  • vue如何实现文件切片上传
    这篇文章主要介绍了vue如何实现文件切片上传的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue如何实现文件切片上传文章都会有所收获,下面我们一起来看看吧。在实际开发项目过程中有时候需要上传比较大的文件,然后呢...
    99+
    2023-07-05
  • Vue如何实现封装一个切片上传组件
    今天小编给大家分享一下Vue如何实现封装一个切片上传组件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。组件效果单文件切片上传...
    99+
    2023-07-05
  • Vue实现封装一个切片上传组件
    目录组件效果使用文档封装过程1. 文件切片2. 构造切片请求参数3. 控制分片请求的并发完整代码待完善组件效果 单文件切片上传 多文件切片上传 组件使用案例 <templa...
    99+
    2023-03-19
    Vue封装切片上传组件 Vue切片上传组件 Vue切片上传
  • vue如何实现上传图片文件
    这篇文章给大家分享的是有关vue如何实现上传图片文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。原始input标签form表单上传<input type="file"&nbs...
    99+
    2023-06-15
  • vue利用插件实现按比例切割图片
    本文实例为大家分享了vue利用插件实现按比例切割图片的具体代码,供大家参考,具体内容如下 1.使用插件——vueCropper 安装该插件:npm install vue-cropp...
    99+
    2022-11-12
  • vue 文件切片上传的项目实现
    目录流程简说获取文件的 MD5 唯一标识码文件切片获取文件名 name分片文件大小 chunkSize文件切片 chunkList 列表切片总数 chunks切片大小 size合并在...
    99+
    2023-03-24
    vue 文件切片上传 vue 大文件上传
  • vue中怎么实现一个上传图片组件
    本篇文章给大家分享的是有关vue中怎么实现一个上传图片组件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.首先得有一个[type=file]...
    99+
    2022-10-19
  • 浅析vue怎么实现文件切片上传
    在实际开发项目过程中有时候需要上传比较大的文件,然后呢,上传的时候相对来说就会慢一些,so,后台可能会要求前端进行文件切片上传,很简单哈,就是把比如说1个G的文件流切割成若干个小的文件流,然后分别请求接口传递这个小的文件流。流程简说实现文件...
    99+
    2023-05-14
    文件上传 文件切片 Vue.js
  • vue文件切片上传的项目怎么实现
    这篇文章主要介绍“vue文件切片上传的项目怎么实现”,在日常操作中,相信很多人在vue文件切片上传的项目怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue文件切片上传的项目怎么实现”的疑惑有所帮助!...
    99+
    2023-07-05
  • VUE如何实现上传图片功能
    这篇“VUE如何实现上传图片功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“VUE如何实现上传图片功能”文章吧。首先要创建...
    99+
    2023-07-04
  • vue如何实现上传组件
    这篇文章主要介绍vue如何实现上传组件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!思路文件上传的两种实现方式From形式<form   method="post&quo...
    99+
    2023-06-15
  • 如何使用Java实现图片切割功能
    这篇文章将为大家详细讲解有关如何使用Java实现图片切割功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下工具类package com.xudaolong.Utils;import&...
    99+
    2023-06-28
  • vue+ bootstrap如何实现图片上传图片展示功能
    这篇文章给大家分享的是有关vue+ bootstrap如何实现图片上传图片展示功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果图如下所示:html..... ..........
    99+
    2022-10-19
  • vue-upload-component如何封装一个图片上传组件
    这篇文章主要介绍了vue-upload-component如何封装一个图片上传组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。需求分析业务...
    99+
    2022-10-19
  • vue中实现图片和文件上传功能
    本篇文章为大家展示了vue中实现图片和文件上传功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。html页面<input type="fi...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作