html图片上传并预览笔记

一、图片上传,原图无压缩

1、用到的js和css(只为美规,可以不用):jasny-bootstrap.css、jasny-bootstrap.js

2、、html代码

3、后台接收代码

四、图片压缩后上传

1、设置js脚本压缩

1 async function pushFrom(){
  2   let file3 = document.getElementById('file').files[0];
  3   if(file3 && '' != file3){
  4     let base64 =  await PromiseCompress(file);
  5     var formData = new FormData(form);
  6     formData.append("base64 ",base64 );
  7     
  8     $.ajax({
  9        type:'post',
 10        url: "/alcms/workermonitor/siAlcWorkerMonitor/everydaymonitorsave",
 11        processData:false,
 12         contentType:false,
 13        data: formData,  //重点必须为一个变量如:data
 14        success:function(data){
 15
 16        },
 17        error:function(e){
 20        }
 21     })
 25   }
 27 }
 28
 29 //不对图片进行压缩
 30 function directTurnIntoBase64(fileObj,callback) {
 31         var r = new FileReader();
 32         //转成base64
 33         r.onload = function () {
 34             imgBase64 = r.result;
 35          //   console.log(imgBase64);
 36             callback(imgBase64)
 37         }
 38         r.readAsDataURL(fileObj);//转成base64格式
 39 }
 40
 41     /* 异步压缩图片 */
 42 async function PromiseCompress(fileObj) {
 43     return new Promise(function (resolve, reject) {
 44         compress(fileObj,function (imgBase64) {
 45                 resolve(imgBase64);
 46         })
 47     })
 48 }
 49
 50
 51     //对图片进行压缩
 52 function compress(fileObj,callback) {
 53     console.log('准备压缩的对象:'+fileObj);
 54     if(!fileObj){
 55         console.log('不压缩');
 56         return;
 57     }
 58     if(typeof (FileReader) === 'undefined'){
 59         console.log("当前浏览器内核不支持base64图片压缩")
 60         directTurnIntoBase64(fileObj,callback);
 61     }else{
 62         try{var reader = new FileReader();
 63             // 原图
 64             var yimage = $('');
 65             yimage.src = fileObj.result;
 66             reader.onload = function (e) {var image = $('');
 67                 image.on('load',function () {
 68                     let imageNW = this.naturalWidth;
 69                     let imageNH = this.naturalHeight;
 70                     let compressRatia = 1;
 71                     if(imageNH > 800){
 72                         // 图片高大于800时等比例缩小到800以下
 73                         compressRatia = 800 / imageNH;
 74                     }else if(imageNW > 500){
 75                         // 图片宽大于500时等比例缩小到500以下
 76                         compressRatia = 500 / imageNW;
 77                     }
 78                     //定义画布大小,也就是图片压缩之后的像素
 79                     var squareW = Number(imageNW * compressRatia).toFixed(0);
 80                     var squareH = Number(imageNH * compressRatia).toFixed(0);
 81                     var canvas = document.createElement('canvas'),
 82                         context = canvas.getContext('2d'),
 83                         imageWidth = 0, //压缩图片大小
 84                         imageHeight = 0,
 85                         offsetX = 0,
 86                         offsetY = 0,
 87                         data = '';
 88                         canvas.width = squareW;
 89                         canvas.height = squareH;
 90                         context.clearRect(0,0,squareW,squareH);
 91                     console.log('判断宽度');
 92                     if(this.width > squareW){
 93                         imageWidth = Math.round(squareW);
 94                         imageHeight = squareH;
 95                         offsetX = Math.round((imageWidth-squareW)/2);
 96                     }else{
 97                         imageHeight = Math.round(squareH);
 98                         imageWidth = squareW;
 99                         offsetY = Math.round((imageHeight - squareH)/2)
100                     }
101                     console.log('准备压缩');
102                     context.drawImage(this,offsetX,offsetY,imageWidth,imageHeight);
103                     var data = canvas.toDataURL('image/jpeg')
104                     callback(data)
105                 });
106                 image.attr('src',e.target.result)
107             };
108             console.log('执行reader.readAsDataURL');
109             console.log(Object.prototype.toString.call(fileObj));
110             console.dir(fileObj);
111             reader.readAsDataURL(fileObj);
112         }catch (e) {
113             console.log('压缩失败!' + e);
114             //调用不压缩方法
115             directTurnIntoBase64(fileObj,callback)
116         }
117     }
118 }

Original: https://www.cnblogs.com/yangdadaBO/p/16149163.html
Author: 洋大大
Title: html图片上传并预览笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/570967/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Docker安装InfluxDB1.x和InfluxDB2.x以及与SpringBoot整合

    两者区别: 1.x 版本使用 influxQL 查询语言,2.x 和 1.8+(beta) 使用 flux 查询语法;相比V1 移除了database 和 RP,增加了bucket…

    Java 2023年6月13日
    092
  • Bean的生命周期

    bean的生命周期:创建→注入→初始化→返回→销毁 简单来说,bean的生命周期为:创建→注入→初始化→返回→销毁 一、代码过程参考 //org.springframework.b…

    Java 2023年6月13日
    083
  • SpringMVC的数据响应

    SpringMVC的数据响应方式 1,页面跳转 直接返回字符串 通过ModelAndView对象返回2) 回写数据 直接返回字符串 返回对象或集合 页面跳转 2. 返回Mo…

    Java 2023年6月7日
    082
  • JAVA 异常 基本知识

    异常 异常定义 异常是运行过程中出现的错误 人为错误:填写错误等 随机错误:网络中断、内存耗尽等 一个健壮的程序必须处理各种各样的错误 Java的异常是class Object T…

    Java 2023年6月9日
    067
  • 自定义查询–关于倒排索引的研究

    最近学习了es的视频,感觉这个产品对于查询来说非常方便,但是如何应用到我们自己的 产品中来呢。因为我们的产品数据更新太快,其实不太适合用es做主力存储。并且我们的业务还没有到那种巨…

    Java 2023年6月9日
    086
  • 2022年6月1日笔记

    2022年6月1日笔记 求阶乘 输入一个数n,求n的阶乘; 程序源码: #include <stdio.h> main(){ int i=1,result=1,n; s…

    Java 2023年6月9日
    094
  • IDEA 去除 mybatis.xml 文件黄色警告

    默认情况下在 mybatis 的 xml 文件中,IDEA 会报如下警告 去除黄色背景的警告,步骤如下 找到 设置 , Editor,Inspections,SQL 去除 No d…

    Java 2023年5月30日
    075
  • es篇-es基础

    点赞再看,养成习惯,微信搜索「 小大白日志」关注这个搬砖人。 文章不定期同步公众号,还有各种一线大厂面试原题、我的学习系列笔记。 es和solr一样,都是基于Lucene的全文检索…

    Java 2023年6月8日
    079
  • Java中的三种校验注解的使用(@Valid,@Validated和@PathVariable)

    @RestController public class PathErrorController extends BasicErrorController {@Autowiredp…

    Java 2023年5月29日
    082
  • 关于将java项目部署到docker容器中并让本机访问

    1.在服务器中安装docker并且拉mysql,java镜像。 2.开启mysql容器(设置Asia/shanhai 时间),登录其中,select now() 查询时间是否与当前…

    Java 2023年6月6日
    081
  • 吴世枫老师指导下的团队作业—系统设计和任务分配

    一、建立团队项目 的码云git代码库: 地址为:https://gitee.com/ZZUOldUncle/rich-app 二、讨论制定团队的编码规范,讨论之前和讨论之后,队员阅…

    Java 2023年6月6日
    085
  • 性能测试案例全过程方案八———混合场景设计(多线程组并发运行)

    JMeter压力测试(一)中设置线程组的线程数,即执行时的并发用户数,适用于单个线程组的并发测试。 如果测试需求出现如下场景,该如何使用JMeter实现压力测试呢?即JMeter如…

    Java 2023年5月30日
    0102
  • 面向对象编程三⼤特性 –封装、继承、多态

    作者:小牛呼噜噜 | https://xiaoniuhululu.com计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 封装 继承 多态 一道简单的面…

    Java 2023年6月15日
    085
  • 记录一次NoSuchMethodError问题的解决

    一、问题描述 今天在执行单元测试时遇到了一个NoSuchMethodError错误,完整的报错信息如下: … Caused by: javax.validation.Valid…

    Java 2023年6月15日
    068
  • Intellij IDEA 显示 access.log 日志

    先配置 SpringBoot 记录 access.log 日志,先让accesslog 显示出来 Original: https://www.cnblogs.com/vipsoft…

    Java 2023年6月13日
    074
  • spring boot+log4j2快速使用(一)

    log4j是Apache的一个开源项目,log4j2和log4j是一个作者,只不过log4j2是重新架构的一款日志组件,他抛弃了之前log4j的不足,以及吸取了优秀的logback…

    Java 2023年6月8日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球