使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能


Posted in HTML / CSS onDecember 16, 2016

最近在做一个移动端HTML5的应用,使用到了上传功能,起初使用传统的上传方式上传手机拍照的照片,由于手机拍照出来的照片一般都是好几MB,所以上传速度是非常慢的。

在网上找了很久找到了localResizeIMG压缩框架,感觉非常的实用,所以在此分享给大家。

第一步:下载localResizeIMG

localResizeIMG放在github中的,地址是:https://github.com/think2011/localResizeIMG。

第二步:在web工程中导入localResizeIMG相关js

解压localResizeIMG压缩吧,把目录中的dist文件夹拷贝到工程中,我的是放在js目录下。

然后在自己的js中导入jQuery和localResizeIMG的js。如:

<span style="white-space:pre">    </span><script src="<c:url value="/js/JQuery/jquery-1.10.0.min.js"/>"></script>  
<span style="white-space:pre">    </span><script type="text/javascript" src="<c:url value="/js/lrz/dist/lrz.bundle.js"/>"></script>

第三步:在自己的上传的input的file框加入onchange事件如下代码

<input  type="file"  id="payfile" name="myfile" style="display:none;" onchange="fileChange(this)" />

在fileChange方法中实现代码的压缩和对压缩后生成的base64异步传到后台

function fileChange(that){  
        var filepath=$(that).val();  
        if(filepath=="")  
        {  
            return;  
        }  
        var extStart=filepath.lastIndexOf(".");  
        var ext=filepath.substring(extStart,filepath.length).toUpperCase();  
        if(".jpg|.png|.bmp|.jpeg".toUpperCase().indexOf(ext.toUpperCase())==-1){  
           alert("只允许上传jpg、png、bmp、jpeg格式的图片");  
            return false;  
        }  
     //以图片宽度为800进行压缩  
    lrz(that.files[0], {  
         width: 800  
       })  
    .then(function (rst) {  
            //压缩后异步上传  
            $.ajax({  
            url : "<%=request.getContextPath()%>/common/fileUploadPicture",  
            type: "POST",  
            data : {  
                imgdata:rst.base64//压缩后的base值  
            },  
            dataType:"json",  
            cache:false,  
            async:false,  
            success : function(data) {  
            if(data.success)  
                {  
                    alert(data.message);///data.message为上传成功后的文件路径  
                }else{  
                    alert(data.message);///data.message为上传失败原因  
                }  
                              
                        },  
        error : function(){  
                alert("上传失败");  
                        }  
                    });  
         });  
}

第四步:spring mvc controller 后台接收base值并解析并保存文件

import sun.misc.BASE64Decoder;//导入的base64的类  
/** 
     * 文件上传 
     */  
    @ResponseBody  
    @RequestMapping("common/fileUploadPicture")  
    public Object fileUploadPicture(String imgdata, HttpServletRequest request) {  
        LOGGER.info("[文件上传(fileUploadPicture)][params:imgdata=" + imgdata + "]");  
         BASE64Decoder decoder = new BASE64Decoder();  
        try {  
            String basePath = request.getRealPath("/upload_files");  
            string imgPath=basePath+"/test.jpg";  
            // new一个文件对象用来保存图片,默认保存当前工程根目录  
            File imageFile = new File(imgPath);  
            // 创建输出流  
            FileOutputStream outputStream = new FileOutputStream(imageFile);  
            // 获得一个图片文件流,我这里是从flex中传过来的  
            byte[] result = decoder.decodeBuffer(imgdata.split(",")[1]);//解码  
            for (int i = 0; i < result.length; ++i) {  
                if (result[i] < 0) {// 调整异常数据  
                result[i] += 256;  
            }  
        }  
            outputStream.write(result);  
  
            return new Result(true, imgPath);  
        } catch (AppException e1) {  
            LOGGER.error("[文件上传(fileUpload)-fastdfs][errors:" + e1 + "]");  
            return new Result(false, "文件上传失败");  
        } catch (Exception e) {  
            LOGGER.error("[文件上传(fileUpload)][errors:" + e + "]");  
            return new Result(false, "文件上传失败");  
        }finally{  
        outputStream.flush();   
        outputStream.close();  
          
        }  
    }

Result类:

import java.io.Serializable;  
  
public class Result implements Serializable{  
    private static final long serialVersionUID = 1L;  
    private boolean success;  
    private String message;  
  
    public Result() {  
        success = true;  
    }  
  
    public Result(boolean success, String message) {  
        this.success = success;  
        this.message = message;  
    }  
  
    public boolean isSuccess() {  
        return success;  
    }  
  
    public void setSuccess(boolean success) {  
        this.success = success;  
    }  
  
    public String getMessage() {  
        return message;  
    }  
  
    public void setMessage(String message) {  
        this.message = message;  
    }  
  
    @Override  
    public String toString() {  
        return "Result [success=" + success + ", message=" + message + "]";  
    }  
  
}

以上就是所有步骤,希望大家多多留言指正,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
利用CSS3实现炫酷的飞机起飞动画
Sep 17 HTML / CSS
css背景图片的背景裁切、背景透明度、背景变换等效果运用
Dec 24 HTML / CSS
使用CSS3和Checkbox实现JQuery的一些效果
Aug 03 HTML / CSS
CSS3模拟IOS滑动开关效果
Sep 28 HTML / CSS
纯css3实现宠物小鸡实例代码
Oct 08 HTML / CSS
纯CSS3实现移动端展开和收起效果的示例代码
Apr 26 HTML / CSS
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
Jun 02 HTML / CSS
5分钟弄清楚html5的drag and drop(小结)
Apr 10 HTML / CSS
浅谈html5增强的页面元素
Jun 14 HTML / CSS
html5使用Drag事件编辑器拖拽上传图片的示例代码
Aug 22 HTML / CSS
canvas 实现 github404动态效果的示例代码
Nov 15 HTML / CSS
canvas如何实现多张图片编辑的图片编辑器
Mar 10 HTML / CSS
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
Dec 15 #HTML / CSS
canvas与html5实现视频截图功能示例
Dec 15 #HTML / CSS
详解html5 canvas常用api总结(二)--绘图API
Dec 14 #HTML / CSS
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
Dec 14 #HTML / CSS
详解使用HTML5 Canvas创建动态粒子网格动画
Dec 14 #HTML / CSS
H5新属性audio音频和video视频的控制详解(推荐)
Dec 09 #HTML / CSS
Html5 Geolocation获取地理位置信息实例
Dec 09 #HTML / CSS
You might like
关于在php.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
php array_values 返回数组的值实例详解
2016/11/17 PHP
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
js操作checkbox遇到的问题解决
2013/06/29 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
通过实例了解Render Props回调地狱解决方案
2020/11/04 Javascript
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
Python嵌套式数据结构实例浅析
2019/03/05 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
Django实现celery定时任务过程解析
2020/04/21 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
在什么时候需要使用"常引用"
2015/12/31 面试题
初中学生期末评语
2014/04/24 职场文书
民族精神月活动总结
2014/08/28 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
党支部三会一课计划
2014/09/24 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
python3使用diagrams绘制架构图的步骤
2021/04/08 Python