zoukankan      html  css  js  c++  java
  • js 通过文件输入框读取文件为 base64 文件, 并借助 canvas 压缩 FileReader, files, drawImage

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>JS文件上传</title>
        <script type="text/javascript" src="../js/jQuery.js"></script>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            
            #img {
                display: block;
                width: 9.98rem;
                height: 6rem;
                border: .01rem solid black;
            }
            
            #file {
                display: block;
                margin: -6rem 0 0 0;
                opacity: 0;
                width: 10rem;
                height: 6rem;
            }
            
            #submit {
                display: block;
                width: 5rem;
                height: 2rem;
                margin: .5rem 2.5rem;
                font-size: .45rem;
                text-align: center;
                line-height: 2rem;
            }
        </style>
    </head>
    <body>
        <img id="img" src="" />
        <input id="file" type="file" />
        <input id="submit" type="button" value="提交文件" />
    </body>
    </html>
    <script type="text/javascript">
        // rem布局
        $('html').css('font-size', $(window).width() / 10);
        // 实例化文件输入框的读取对象
        var fileReader = new FileReader();
        var base64File = null;
        // 当文件输入框读取到文件时
        $('#file').on('change', function(){
            // 获取文件列表
            var fileList = $("#file")[0].files;
            fileReader.onload = function(e){
                // 获取扩展名
                var extensionName = fileList[0].name.split('.');
                extensionName = extensionName[extensionName.length -1];
                // 获取文件的base64编码
                var base64 = e.target.result;
                // 将读取 文件放置到一个img标签
                $('#img').attr('src', base64);
                // 当文件加载完成后进行压缩
                var img = $('#img')[0];
                img.onload = function(){
                    // 将文件和文件扩展名拼接
                    base64File = cutDowmImg(img, 100).split(',')[1] + "." + extensionName;
                    // 将拼接后的字符串加密
                    base64File = encodeURIComponent(base64File);
                }
            }
            fileReader.readAsDataURL(fileList[0]);
        });
        // 提交图片
        $('#submit').on('click', function(){
            console.log(base64File);
            $.post("http://192.168.0.105/WebTest/Base64UploadServlet", {file: base64File}, function(e){
                console.log(e);
            })
        });
        // 压缩图片的方法
        function cutDowmImg(img, width){
            var canvas = document.createElement("canvas");
            canvas.width = Math.min(img.width, width);
            canvas.height = img.height*width/img.width;
            var cxt = canvas.getContext("2d");
            cxt.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height);
            return canvas.toDataURL();
        }
    </script>
  • 相关阅读:
    指针
    const
    指针数组和指向数组的指针
    extjs初探之由浅入深目录
    ie6字体设置13px引发的问题
    在IAR下通过Jlink将程序直接下载到Flash指定地址
    提高C语言程序运行稳定性的方法
    C/C++编程习惯
    释放QQ占用的C盘空间
    非阻塞算法思想在关系数据库应用程序开发中的使用
  • 原文地址:https://www.cnblogs.com/lovling/p/6686688.html
Copyright © 2011-2022 走看看