精华内容
下载资源
问答
  • JS前端图片压缩上传

    万次阅读 2021-02-22 12:31:25
    JS前端图片压缩上传 在这里插入代码片 在这里插入代码片 function dealImage(base) { let image = new Image(); //新建一个img标签(不嵌入DOM节点,仅做canvas操作) image.src = base; //让该标签加载base64...

    JS前端图片压缩上传重点知识

    最近在做一个手机端的图片上传,写了一个比较符合自己要求的方法,可供参考

    在做这个功能模块时,我遇到了以下问题,都花费了大量时间:

    1. 不知道怎么压缩图片,(代码和方法)
    2. 得到图片压缩后的base64值,也可以预览,但却传不到后端去
    3. 怎么确保我想要压缩的所有图片,大小都相近,图片还尽可能的清晰
    (如我参考了网上的代码,基本都是按照比例压缩如1/2或1/4,那一个10m的图片压缩完后还有5m或者2.5m,意义不大,那你说比例调大些,按照1/10比例压缩,这样万一我上传的文件只有200k,这样一压缩图片就严重失真了)
    4. 将文件发送到后端时携带参数问题

    代码没有捷径可走啊!!···· 注:所有的图片都会被压缩到1M左右,如有需要可以调整相应参数!

    =-目前博主引用的是jQuery和layui框架,如不用layui框架注释掉相应的样式即可,影响的只有界面,可能要稍稍修改HTML
    layui下载链接:https://download.csdn.net/download/bug_producter/15491803
    不熟悉layui框架的小伙伴请参考:

    ~~点击转到《JS前端图片压缩上传-纯js》

    实例代码如下:

    <%--
      Created by IntelliJ IDEA.
      User: ASUS
      Date: 2021/2/22
      author: xumz
      To change this template use File | Settings | File Templates.
      搬运请备注
    --%>
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <!-- meta使用viewport以确保页面可自由缩放 -->
        <meta name="viewport"
              content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
        <title>身份验证</title>
        <%--引用jQuery和layui框架,如不用layui框架注释掉相应的样式即可,影响的只有界面--%>
        <script src=" js/jquery-1.11.0.js"></script>
        <script src="js/layui/layui.js"></script>
        <link rel="stylesheet" href="js/layui/css/layui.css" media="all">
        <style type="text/css">
    
            [id^="layui-layer"] {
                border-radius: 9px !important;
            }
    
            .up_img_showborder {
                border: 1px rgba(143, 143, 143, 0.43) dashed;
                width: 85%;
                height: 165px;
                margin: 25px;
            }
    
            #img_one {
                border: 1px #F2F2F2 solid;
                max-width: 96%;
                max-height: 160px;
                /*padding: 4px;*/
            }
    
            .icon_style {
                font-size: 50px;
                color: #efefef;
                line-height: 100px;
            }
        </style>
    
    </head>
    
    <body>
    
    <div style="width: 90%;height: 100%;margin: auto;" align="center">
        <span>建议传送1M以上的图片进行测试,会有明显的效果,所有的图片都会被压缩在1M以内</span>
        <div id="upload_img01" class="up_img_showborder">
            <div id="hiden_one">
                <i class="layui-icon layui-icon-addition icon_style"></i>
                <p style="color: gray">点击上传图片</p>
            </div>
    
            <div class="layui-hide" id="uploadDemoView">
                <img class="layui-upload-img" id="img_one">
            </div>
        </div>
    
        <div>
            <input type="button" class="layui-btn layui-btn-normal layui-btn-lg" onclick="next_btn(this)" value="确认">
        </div>
    
        <div>
            <input type="file" style="visibility: hidden" accept="image/*" id="btn1">
        </div>
    
    </div>
    
    <script type="text/javascript">
    
        //引用layui不可少
        layui.use(['form', 'layer', 'upload'], function () {
            var form = layui.form
                , layer = layui.layer
                , upload = layui.upload;
        });
    
        /*点击上传正面图片*/
        $(document).on('click', '#upload_img01', function () {
            document.getElementById("btn1").click();
        });
    
        var BlobDealImg = null;
    
        /*input数据改变时,获取文件数据,上传正面*/
        $("#btn1").change(function () {
            console.log("压缩前的数据大小(1M=1024*1024)="+this.files[0].size);
            let up_ImgBase64 = this.files[0];	//获取文件对象
            if (null != up_ImgBase64 && up_ImgBase64 != "") {
                layer.msg("图像采集成功!");
                var reader = new FileReader();
                reader.readAsDataURL(up_ImgBase64);	//将读取的文件转换成base64格式
                reader.onload = function (e) {
                    var dataBase64 = e.target.result; //result是你读取到的文件内容,此属性读取完成才能使用
                    // console.log('dataBase64==='+dataBase64);
                    dealImage(dataBase64);
                    setTimeout(function () {
                        console.log("压缩后的数据大小(1M=1024*1024)="+BlobDealImg.size);
                        // console.log("转成blob文件后:"+BlobDealImg);
                        console.log(BlobDealImg);
                    }, 50);
                }
            } else {
                layer.open({
                    title: ['提示', 'border-radius: 6px;']
                    , shadeClose: true
                    , resize: false
                    , content: '图像采集失败,请重新采集!'
                });
            }
        });
    
        function dealImage(base) {
            let image = new Image();    //新建一个img标签
            image.src = base;   //让该标签加载base64格式的原图
            image.onload = function () {    
                let canvas = document.createElement('canvas'), //创建一个canvas元素
                    context = canvas.getContext('2d'),    
                    originWidth = image.width,/* 图片的宽度 */
                    originHeight = image.height, /* 图片的高度 */
                    data = '';    //存储压缩后的图片
    
                // 设置最大尺寸限制,将所有图片都压缩到小于1m
                const maxWidth = 1024, maxHeight = 1024;
                // 需要压缩的目标尺寸
                let targetWidth = originWidth, targetHeight = originHeight;
                // 等比例计算超过最大限制时缩放后的图片尺寸
                if (originWidth > maxWidth || originHeight > maxHeight) {
                    if (originWidth / originHeight > 1) {
                        // 宽图片
                        targetWidth = maxWidth;
                        targetHeight = Math.round(maxWidth * (originHeight / originWidth));
                    } else {
                        // 高图片
                        targetHeight = maxHeight;
                        targetWidth = Math.round(maxHeight * (originWidth / originHeight));
                    }
                }
                canvas.width = targetWidth;   //设置绘图的宽度
                canvas.height = targetHeight;   //设置绘图的高度
                //使用drawImage重新设置img标签中的图片大小,实现压缩。drawImage方法的参数可以自行查阅W3C
                context.drawImage(image, 0, 0, targetWidth, targetHeight);
    
                //使用toDataURL将canvas上的图片转换为base64格式
                data = canvas.toDataURL('image/jpg');
    
                $('#hiden_one').addClass('layui-hide');//隐藏区域中的icon和文字
                $('#uploadDemoView').removeClass('layui-hide'); //打开隐藏的image标签
                document.getElementById('img_one').src = data;//将压缩后的图片显示到页面上的img标签
                //将base64转为blob文件对象
                BlobDealImg = convertBase64UrlToBlob(data);
                // console.log(BlobDealImg);
                //上传文件携带参数问题解决
                var formData = new FormData();//这里需要实例化一个FormData来进行文件上传
                formData.append("file", BlobDealImg, "file_" + Date.parse(new Date()) + ".jpg");//文件
                formData.append("data2", "12345");//参数1
                formData.append("data1", "023");
    
                //做到这一步前端的所有代码就已经写完了,接下来只需要后端接收即可
    
                /* $.ajax({
                     url: '', //改成您自己的上传接口
                     data: formData,
                     type: "post",
                     processData: false,//不需要将传输的数据序列化,必须这么写
                     contentType: false,
                     // dataType: "json",
                     success: function (res) {
    
                     },
    
                 });*/
            }
        };
    
        /*将base64转为blob文件对象,再上传*/
        function convertBase64UrlToBlob(urlData) {
            var arr = urlData.split(','), mime = arr[0].match(/:(.*?);/)[1],
                bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
            while (n--) {
                u8arr[n] = bstr.charCodeAt(n);
            }
            return new Blob([u8arr], {type: mime});
        }
    
    </script>
    </body>
    </html>
    
    

    运行界面如下:
    在这里插入图片描述

    在这里插入图片描述

    目前博主测试过得最大上传图片为10M,压缩后只有1M多如下:
    在这里插入图片描述

    关于文件上传的后端Java操作,你还可以参考以下连接:

    文件上传从web到Java (https://blog.csdn.net/bug_producter/article/details/115710630)

    创作不易,如果这篇文章能够帮助到你,希望能关注或收藏一下博主,如果文章内容有问题也可留言讨论,我们一起学习,一起进步!!

    展开全文
  • js前端特殊字符处理

    千次阅读 2016-04-19 09:56:51
    js前端特殊字符处理
    /**
     * js前端特殊字符处理
     * @param str 要处理的字符串
     * 搜微信公众号wu7zhi,每天知道一点点。有趣的,打心的,总有你意想不到的。

     */

     function escapeHtmlEntities (str) {

        var escapes = {
            '\\' : '\\',
            '"' : '"',
            '/' : '/',
            't' : '\t',
            'n' : '\n',
            'r' : '\r',
            'f' : '\f',
            'b' : '\b',
            '<' : '<',
            '>' : '>'
        };
        return str.replace(/\\(?:u(.{4})|([^u]))/g, function(a, b, c) {
            return b ? String.fromCharCode(parseInt(b, 16)) : escapes[c];
        });
    }
    展开全文
  • js前端解析excel文件

    千次阅读 2017-08-16 18:30:15
    js前端解析excel文件 使用纯Javascript解析excel文件。 使用的是开源的解析excel的js库:sheetjs。github地址:https://github.com/SheetJS/js-xlsx   首先引用JS库 script src="od.js">script> script src=...

    js前端解析excel文件

    使用纯Javascript解析excel文件。

    使用的是开源的解析excel的js库:sheetjs。github地址:https://github.com/SheetJS/js-xlsx

     

    首先引用JS库

    <</span>script src="od.js"></</span>script>
    <</span>script src="jszip.js"></</span>script>
    <</span>script src="xlsx.js"></</span>script>
    

    放置页面组件

    <</span>body>
        <</span>div id="drop">Drop an XLSX / XLSM / XLSB / ODS / XLS / XML file here to see sheet data</</span>div>
        <</span>p><</span>input type="file" name="xlfile" id="xlf" /> ... or click here to select a file</</span>p>
    </</span>body>
    

     页面效果如下:

    给dom元素添加监听

     

    复制代码
    function addLis() {
        var xlf = document.getElementByIdx_x('xlf');
        var drop = document.getElementByIdx_x('drop');
        drop.addEventListener("dragenter", handleDragover, false);
        drop.addEventListener("dragover", handleDragover, false);
        drop.addEventListener("drop", onDropDown, false);
        if(xlf.addEventListener) xlf.addEventListener('change', handleFile, false);
    }
    
    addLis();
    
    function handleDragover(e) {
        e.stopPropagation();
        e.preventDefault();
        e.dataTransfer.dropEffect = 'copy';
    }
    
    function onDropDown(e) {
        e.stopPropagation();
        e.preventDefault();
        var files = e.dataTransfer.files;
        var f = files[0];
        readFile(f);
    }
    
    function handleFile(e) {
        var files = e.target.files;
        var f = files[0];
        readFile(f);
    }
    
    复制代码

    读取文档并输出到控制台:

     

    复制代码
    function readFile(file) {
    
        var name = file.name;
        var reader = new FileReader();
        reader.onload = function (e) {
            var data = e.target.result;
            var wb = XLSX.read(data, { type: "binary" });
            console.log(wb);
        };
        reader.readAsBinaryString(file);
    }
    
    复制代码

    输出示例:

     

    展开全文
  • JS前端判断数组是几维数组

    千次阅读 2017-12-25 10:54:19
    JS前端 判断数组是几维数组

    用到了递归思路,一层一层去循环数组,下边是代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>数组</title>
    </head>
    <body>
    	
    </body>
    <script type="text/javascript">
    	var arr = [1,2,3,[1,2,3,1,3,[1,2,3,6,4,[1,2,3,1]]],2],a=1;
    	function multiarr(arr){
    		for (i=0;i<arr.length;i++){
    			if(arr[i] instanceof Array){
    				a++;
    				arr = arr[i];
    				multiarr(arr);
    			}
    		}
    		return a;
    	}
    	console.log(multiarr(arr));
    </script>
    </html>


    展开全文
  • js前端控制上传文件的格式

    千次阅读 2019-07-20 00:50:32
    js前端控制上传文件的格式 <HTML> <HEAD> <TITLE>js前端控制上传文件的格式</TITLE> </HEAD> <BODY> <FORM ACTION="load.jsp" METHOD="POST" ENCTYPE="mutipart...
  • js前端传中文到后端乱码处理方法

    千次阅读 2019-10-15 17:52:41
    js前端传中文到后端乱码处理方法: 1.js前端处理: String content = encodeURI(encodeURI(params.content)); // 编码两次 2.java后台处理: String content=smsSendTemplate.getContent(); // 内置会解码一次 ...
  • js前端验证和绕过

    千次阅读 2018-02-13 14:03:00
    一、js前端验证 本篇基于上篇,修改了form.html 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=...
  • JS前端调用TSC打印二维码、条码

    千次阅读 2019-01-10 18:04:41
    公司让用js调用TSC打印二维码,本人已调试...实现代码:JS前端调用TSC打印二维码实现代码 <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title&g...
  • JS前端笔试编程题(1)

    千次阅读 2018-03-24 14:30:58
    JS前端笔试编程题(1) 最近忙于春招,为了多投几家公司把暌违已久的前端也捡了起来,闲来无事把碰见的编程题在博客上再写一下吧,希望有大神多多指教: - 要求:使用js,返回1到400所有自然数中一共出现过多少...
  • 阿里云 OSS JS前端直传 代码封装

    千次阅读 2019-07-18 15:30:40
    OSS JS前端直传封装: function upload(f,callback){ var client = new OSS.Wrapper({ region : 'oss-cn-beijing', accessKeyId : 'LTAIJDKAA9Bww5', accessKeySecret : 'd4Aw0BmtFa31yYGItEPZ9LpGFSAA...
  • js前端获取 用户的ip地址的方法

    万次阅读 2017-05-16 23:06:47
    目的:js前端获取用户的IP地址 解决办法: html前端代码:直接运行就好 WMI Scripting HTML document.write(returnCitySN["cip"]+','+returnCitySN["cname"])
  • react-pdf-js前端处理PDF的一种方式

    千次阅读 2018-11-18 23:25:47
    react-pdf-js前端处理PDF的一种方式 挖坑。。。
  • js前端根据链接生成二维码并转成图片下载 依赖于jquery、jquery.qrcode.min.js 1.html <div class="qrcode"></div> <button onclick="downloadClick()">下载二维码</button> 2.js ...
  • js前端读取图片流

    万次阅读 2019-07-10 17:06:23
    直接在src中写上就好: <img src="data:image/png;base64,图片流数据" alt="">
  • JS前端怎样生成一个guid(NewGuid)

    千次阅读 2019-11-16 13:02:39
    我们在变成过程中经常用guid作为唯一主键,我们都知道在后台中都有现成的方法来生成唯一主键,那JS前端怎样生成唯一主键呢 使用如下方法可以生成唯一主键,调用后返回值结果就是唯一主键,并且不会重复 function ...
  • js前端实现多图图片上传预览的两个方法

    万次阅读 多人点赞 2016-06-20 15:36:16
    一、将图片转成icon码的实现方式 html代码: ;float: left;" id="st18" name="evidence" onchange="previewImage(this,5)" type="file"/>
  • 关于RSA加密技术的使用,js前端加密,Golang 后端解密 详细 关于rsa 加密算法 可自行参考 rsa算法 前端JS如何使用rsa进行加密 安装jsencrypt【二选一】 github下载地址:链接: jsencrypt ,下载完成之后可得到 如下...
  • 如何利用OAM实现前端门户的单点就是一个问题了,众所周知,如果是ADF开发的程序或者是Oracle的产品需要实现SSO,相对来说简单很多,下面是用OAM 实现Angular JS 前端应用SSO单点登录的实现思路及步骤 实现思路 1、...
  • 在springmvc中controller的结果集可通过json格式传到js前端接受,也可以通过Map传给前端,具体实现如下 1,通过json格式传递  controller层实现如下   [java] view plain copy  @RequestMapping(...
  • js根据数据条数与每页多少条数据计算页数,js前端计算页数
  • 最好用的js前端框架、组件、文档在线预览插件
  • js前端: encodeURIComponent("我爱中国") java后端: URLEncoder.encode("我爱中国") 经过这样处理之后再进行md5加密就可以解决中文问题了。 另一个是请求数据格式问题: 如上图,需....
  • JS前端代码: 引入JS &lt;script type="text/javascript" src="js/core.js" charset="utf-8"&gt;&lt;/script&gt; &lt;script type="text/javascript&...
  • 常用JS前端框架

    千次阅读 2019-04-08 10:45:19
    json-viewer.js http://www.jq22.com/jquery-info13551
  • js前端文件下载

    万次阅读 2018-08-09 10:37:52
    如果希望在前端侧直接触发某些资源的下载,最方便快捷的方法就是使用HTML5原生的download属性,例如: &lt;a href="large.jpg" download&gt;下载&lt;/a&gt; 具体介绍可参考我之前的...
  • JS前端生成唯一标识

    千次阅读 2019-11-26 11:14:10
    转载 原地址:...js获取guid 在前端得到唯一标识符 var guid = guid(); // 得到的guid为唯一标识 /** *获取id */ function guid() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxx...
  • JS前端加密算法

    千次阅读 2016-04-30 21:14:50
    寻思着能不能在前端完成。于是找到了crypto-js。 crypto-js支持各类主流算法。弄个简单点的DES加密。 function decryptByDES(ciphertext, key) { var keyHex = CryptoJS.enc.Utf8.parse(key); var decrypted = ...
  • EXCEl文件导入数据库js前端+C#后台(两种方式): 1:前端读取excel文件流传入后台,后端解析成DataTable,然后将数据插入数据库 前端代码: &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;div style=&amp;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 121,996
精华内容 48,798
关键字:

js前端