手动写一个上传图片的组件,不适用插件,包括限制图片大小,格式

1.html

<ul class="uploadUl">        // 第一li用于回显图片,上传接口图片成功后通过canvas进行绘制回显图片。 第二个li 用于选择文件上传
        <li style="display: inline-block" v-for="(src,index) in files">
          <img @click="ImageToCanvas(src)" class=‘preview‘ :src="src">
          <img class="close" @click="close(index,0)" src="../../../../static/img/closea.png">   // 关闭图层
        </li>
        <li style="display: inline-block" class="roomDiv" @click="chooseImg(0)" v-if="this.files.length<1">
          <input type=‘file‘ name="doc" ref="choose" accept="image/*"  @change=‘setImagePreview($event,0)‘ hidden/>  //hidden,隐藏原始的丑陋的input type=‘file‘
          <img class="roomIMG" src="../../../../static/img/roomPaizhao.png">     // 自行配置背景图片
        </li>
 </ul>
ImageToCanvas(image) {
            // 图片绘制事件,此方法可共用
            console.log(image)
            let canvas = document.createElement("canvas");
            canvas.width = image.width;
            canvas.height = image.height;
            canvas.getContext("2d").drawImage(image, 0, 0);//0, 0参数画布上的坐标点,图片将会拷贝到这个地方
            return canvas;
},
chooseImg(index) {  // 上传图片的点击事件,可传参  console.log(index)  if(index === 0){    this.$refs.choose.click();  }else if(index === 1){    this.$refs.choose1.click();  }},
// 封装一个方法upIMGAjax
upIMGAjax(fileList,imgIndex){  // 上传图片的路径和id  console.log(fileList)  const that = this ;  let formData = new FormData();  formData.append(‘file‘, fileList)  let use = sessionStorage.getItem(‘userName‘) ;  formData.append(‘uploadUserId‘, use)  this.uploadFileRequest(‘‘,formData).then(res =>{    if(res.data.code === 200){       if(imgIndex === 0){         that.roomImgId = res.data.data.id ;         that.roomImgUrl = res.data.data.path ;         sessionStorage.setItem("roomImgId", res.data.data.id);         console.log(that.roomImgId,‘roomId‘)       }       else if(imgIndex === 1){         that.IDimgId = res.data.data.id ;         that.IDimgUrl = res.data.data.path ;       }

    }else{       that.$Toast(res.data.message);    }  }).catch(res => {    // console.log(res)  })},
// 图片绘制 (关键函数)
setImagePreview(event,index) {  // 图片的绘制  const that = this ;  if(index === 0){    this.file.push(event.target.files[0])    // e.target.files[0] 目标文件,固定files不能变名字。    this.files.push(window.URL.createObjectURL(event.target.files[0]))    let filess = event.target.files || event.dataTransfer.files    if (this.files.length === 0) return;    this.createImage(filess, event);    this.upIMGAjax(event.target.files[0],0)  }else if(index === 1){    this.file1.push(event.target.files[0])    this.files1.push(window.URL.createObjectURL(event.target.files[0]))    let filess = event.target.files || event.dataTransfer.files    if (this.files1.length === 0) return;    this.createImage(filess, event)    this.upIMGAjax(event.target.files[0],1)  }},

// 上传之前的图片的压缩插件lrz
createImage(file, event) {  // 图片的压缩  let _this = this  this.lrz(file[0], {    width: 100,    quality: .5  }).then(function (rst) {    _this.file.push(rst.base64)    return rst;  }).always(function () {    event.target.value = null;  })},
// 关闭图层
close(val,index) {  // 上传图片的关闭事件  if(index === 0){    this.files.splice(val, 1);  }else if(index === 1){    this.files1.splice(val, 1);  }},
 

展示效果:

原文地址:https://www.cnblogs.com/panax/p/10960474.html

时间: 2024-10-13 11:19:33

手动写一个上传图片的组件,不适用插件,包括限制图片大小,格式的相关文章

原来热加载如此简单,手动写一个 Java 热加载吧

1. 什么是热加载 热加载是指可以在不重启服务的情况下让更改的代码生效,热加载可以显著的提升开发以及调试的效率,它是基于 Java 的类加载器实现的,但是由于热加载的不安全性,一般不会用于正式的生产环境. 2. 热加载与热部署的区别 首先,不管是热加载还是热部署,都可以在不重启服务的情况下编译/部署项目,都是基于 Java 的类加载器实现的. 那么两者到底有什么区别呢? 在部署方式上: 热部署是在服务器运行时重新部署项目. 热加载是在运行时重新加载 class. 在实现原理上: 热部署是直接重新

有五个学生,每个学生有3门课(语文、数学、英语)的成绩, * 写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩)

/* * 3. 有五个学生,每个学生有3门课(语文.数学.英语)的成绩, * 写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩), * 然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中. * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息 * */ import java.io.*; import java.util.*; public class Test3 { publi

Cordova webapp实战开发:(6)如何写一个iOS下自动更新的插件?

上一篇我们学习了如何写一个Andorid下自动更新的插件,我想还有一部分看本系列blog的开发人员希望学习在iOS下如何做插件的吧,那么今天你就可以来看看这篇文字了. 本次练习你能学到的 学习如何获取iOS当前版本号 学习iOS下插件类的编写 学习iOS下插件的配置 学习iOS下插件的调用 主要内容 APP中[检查更新]显示当前版本号 插件类的编写 在上一篇介绍Andorid插件时我们贴出了很多源码,这里也直接贴出代码,首先是iOS下插件的代码. 我们在Plugins下新建两个文件,一个头文件

利用React写一个评论区组件(React初探)

本文是在阅读学习了官方的React Tutorial之后的整理,实例链接. 开始使用React 首先从官方获取React.js的最新版本(v0.12.2),或者下载官方的Starter Kit,并在我们的html中引入它们: <head> <meta charset="UTF-8"> <title>React Test Page</title> <script src="../build/react.js">

Angular2-编写一个简易的组件

Angular2组件可以这么理解:编写一个类,然后在类的上面用组件装饰器装饰一下,这个类就成组件了. 所以编写组件分两步:1)编写类:2)编写装饰器 1)编写类: export class SimpleComponent {} 2)在类上面编写装饰器: @Component({ selector: 'simple-component', template: `Hello Simple Component!` }) 完整代码如下: @Component({ selector: 'simple-co

手动写一个Servlet

一.做一个类,派生自HttpServlet 1.导两个包 javax.servlet.*; javax.servlet.http.* 2.重写两个方法doGet,doPost 打开tomcat中的servlet-api.jar包,复制这两个方法的实现. package com.itnba.maya.servlet; import java.io.IOException; import javax.servlet.*;//导入包 import javax.servlet.http.*;//导入包

设计模式: 自己手动写一个代理模式

代理模式:为另一个对象提供一个替身或占位符以访问这个对象.代理模式为另一个对象提供代表,以便控制客户对对象的访问,管理访问的方式有许多种. 远程代理管理客户和远程对象之间的交互. 虚拟代理控制访问实例化开销大的对象. 保护代理基于调用者控制对对象方法的访问. 代理模式有许多变体,例如:缓存代理.同步代理.防火墙代理.写入时复制代理. Java内置的代理支持,可以根据需要动态创建代理,并将所有调用分配到所选的调用处理器(InvocationHandler). 下面 的例子是一种保护代理 类图: 源

设计模式: 自己手动写一个装饰者模式

装饰者模式:动态地将责任附加到对象上.若要扩展功能,装饰者提供l比继承更有弹性的替代方案.装饰者和被装饰者有相同的超类型,你可以用一个或多个装饰者包装一个对象.既然装饰者和被装饰者有相同的超类型,所以在任何需要原始对象(被装饰者)的场合,可以用装饰过的对象替换它.装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,已达到特定的目的.对象可以在任何时候被装饰,所以可以在运行时动态地.不限量地用你喜欢的装饰者来装饰对象. 类图: 源代码如下: package decorator; /** *

设计模式: 自己手动写一个状态模式

状态模式: 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类.状态模式将状态封装成独立的类,并将动作委托到代表当前状态的对象.状态模式使用组合通过简单引用不同的状态对象来造成类改变的假象. 状态模式和策略模式有相同的类图,但它们的意图不同,策略模式会用行为和算法来配置Context类.状态模式允许Context随着状态的改变而改变其行为. 源代码: </pre><pre name="code" class="java">pac