springmvc 图片 压缩上传

Easter79
• 阅读 489

第一步,下载相关js文件

https://blog-static.cnblogs.com/files/linxixinxiang/compression.js

第二步,建立jsp页面

 1 <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 2 <!DOCTYPE HTML>
 3 <html>
 4     <head>
 5         <meta charset="utf-8">
 6         <title>测试</title>
 7         <script src="plug-in/jquery-plugs/fileupload/js/jquery.1.9.1.min.js"></script>
 8         <script src="plug-in/jquery-plugs/fileupload/bootstrap/js/bootstrap.min.js"></script>
 9         <link href="plug-in/jquery-plugs/fileupload/bootstrap/css/bootstrap.css" type="text/css" rel="stylesheet" />
10         <script src="my_plug/compression.js"></script>
11         <style>
12             #img {
13                 width: 80px;
14                 height: 30px;
15                 text-align: center;
16                 line-height: 30px;
17                 float: left;
18                 border: solid 1px #1c6a9e;
19                 background-color: #25BA9A;
20                 margin-top: 140px;
21                 border-radius: 10px;
22                 color: rgb(255, 255, 255);
23             }
24             
25             #jg {
26                 width: 300px;
27                 height: 300px;
28                 padding: 20px;
29             }
30         </style>
31         <script>
32             window.onload = function() {
33                 var dd = new compression({
34                     domId: "img", // 上传图片的Dom 目前只支持id;
35                     type: "jpg", // 压缩后保存图片的类型,目前支持 jpeg , png   参数:jpeg png
36                     fidelity: 0.8, // 压缩比例 (0,1]
37                     imgFile: function(base64) {
40                         $.ajax({
41                             url:"后台url路径",
42                             type:"post",
43                             data:{base64Data:base64},
44                             success:function(data){
45                                 var d=$.parseJSON(data);
46                                 if(d.success){
47                                    $("#imageval_id").val(d.obj);
48                                    $("#jg").attr("src", base64);
49                                 }
50                             },
51                             error:function(){
52                                
53                             }
54                         });
56                     }
57                 })
58             }
59 
60             function getFilePath() {
61                 return $("#imageval_id").val();
62             }
63         </script>
64     </head>
65 
66     <body>
67         <div id="img">上传图片</div>
68         <img id="jg" src="">
69         <input type="hidden" id="imageval_id" />
70     </body>
71 
72 </html>

第三步,springMvc后台代码

 1     /**
 2      * 文件上传
 3      * @param request
 4      * @param response
 5      * @return
 6      */
 7     @RequestMapping(params = "upload", method = RequestMethod.POST)
 8     @ResponseBody
 9     public AjaxJson upload(@RequestParam String base64Data ,HttpServletRequest request, HttpServletResponse response) {
10         AjaxJson j = new AjaxJson();
11         String path ="upload/"+CommonDateUtil.getNowTime("yyyyMM");
12         String realPath = request.getSession().getServletContext().getRealPath("/") ;// 文件的硬盘真实路径
13         String xdFilePath=path+"/"+CommonDateUtil.getNowTime("yyyyMMddHHmmssSSS")+".jpg";
14         File fileDir = new File(realPath+ path);
15         boolean judeDirExists = FileUtilTest.judeDirExists(fileDir);
16         if(!judeDirExists){
17             fileDir.mkdirs();
18         }
19         String imageAllFilePath= realPath+xdFilePath;
20         boolean generateImage = Base64ImageUtil.GenerateImage(base64Data,imageAllFilePath);
21         if(generateImage){
22             j.setSuccess(true);
23             j.setObj(xdFilePath);
24         }else{
25             j.setSuccess(false);
26         }
27         return j;
28     }

java 根据base64文件流生成图片代码

 1 import java.io.FileInputStream;
 2 import java.io.FileOutputStream;
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.OutputStream;
 6 
 7 import org.jeecgframework.core.testutil.CommonUtil;
 8 
 9 import sun.misc.BASE64Decoder;
10 import sun.misc.BASE64Encoder;
11 
12 public class Base64ImageUtil {
13     /**
14      * 将 base64字符串转化为 图片 存储
15      * @param imgStr base64字符串
16      * @param imgFilePath 转化为 图片后的保存路径
17      * @return
18      */
19     public static boolean GenerateImage(String imgStr, String imgFilePath) {
20         if (imgStr == null) // 图像数据为空
21             return false;
22         if(imgStr.indexOf("data:image/jpeg;base64,")!=-1){
23             imgStr=imgStr.replace("data:image/jpeg;base64,", "");
24         }
25         BASE64Decoder decoder = new BASE64Decoder();
26         try {
27             // Base64解码
28             byte[] bytes = decoder.decodeBuffer(imgStr);
29             for (int i = 0; i < bytes.length; ++i) {
30                 if (bytes[i] < 0) {// 调整异常数据
31                     bytes[i] += 256;
32                 }
33             }
34             // 生成jpeg图片
35             OutputStream out = new FileOutputStream(imgFilePath);
36             out.write(bytes);
37             out.flush();
38             out.close();
39             return true;
40         } catch (Exception e) {
41             e.printStackTrace();
42             return false;
43         }
44     }
45     /**
46      * 将图片转化为  base64的字节流 
47      * @param imgFilePath 图片的存储路径
48      * @return
49      */
50     public static String GetImageStr(String imgFilePath) {
51         byte[] data = null;        
52         // 读取图片字节数组
53         try {
54             InputStream in = new FileInputStream(imgFilePath);
55             data = new byte[in.available()];
56             in.read(data);
57             in.close();
58         } catch (IOException e) {
59             e.printStackTrace();
60         }
61         // 对字节数组Base64编码
62         BASE64Encoder encoder = new BASE64Encoder();
63         return encoder.encode(data);// 返回Base64编码过的字节数组字符串
64     }
65 }

以上代码思路是:先将图片在前台通过  compression.js 的方法 将图片进行压缩为  base64 的文件流,将base64文件流传递到java后台进行接收 然后将  base64流重新转化为图片,百度了半天学习许多大神的方法与思路实现了 图片压缩上传功能,为了方便以后查找记录一下。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k