diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java index 661b089..44daa06 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -4,8 +4,10 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.register.model.IrisData; import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.util.Base64Util; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -25,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; +import sun.misc.BASE64Decoder; /** * 控制器 @@ -47,64 +50,76 @@ */ @RequestMapping(value = "/add") @ResponseBody - public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + public Object imageUpload(@RequestParam("image_zy0")String image_zy0,@RequestParam("image_zy1")String image_zy1,@RequestParam("image_yy0")String image_yy0,@RequestParam("image_yy1")String image_yy1,@RequestParam("personId")String personId,String idCardNo) throws IOException { Map map = null; map = irisDataService.selectByPersonId(personId); if(map!=null){ - return ResponseData.error("已注册过该人员的虹膜数据"); + return ResponseData.error("已存在该人员的虹膜数据"); } - if(images.size()!=4){ - return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + if(ToolUtil.isEmpty(image_zy0)||ToolUtil.isEmpty(image_zy1) || ToolUtil.isEmpty(image_yy0) || ToolUtil.isEmpty(image_yy1)){ + return ResponseData.error("有图像为空"); } IrisData irisData = new IrisData(); - int i = 0; - for (MultipartFile image : images) { - if (!image.isEmpty()) { - InputStream fis = image.getInputStream(); - byte[] result = getIrisCode(fis); - if(result != null && result.length==1024){ - String fileName=""; - if(i==0) fileName = personId+"_left_1.bmp"; - else if(i==1)fileName=personId+"_left_2.bmp"; - else if(i==2)fileName=personId+"_right_1.bmp"; - else if(i==3)fileName=personId+"_right_2.bmp"; - - String pathName = this.filePath + fileName; - File dir = new File(this.filePath); - if (!dir.exists()) { - dir.mkdirs(); - //logger.info("创建文件夹路径为:{}", dir.getPath()); - } - - image.transferTo(new File(pathName)); - - if(i==0) { - irisData.setLeftIrisCode1(result); - irisData.setLeftImage1(fileName); - } - else if(i==1) { - irisData.setLeftIrisCode2(result); - irisData.setLeftImage2(fileName); - } - else if(i==2) { - irisData.setRightIrisCode1(result); - irisData.setRightImage1(fileName); - } - else if(i==3){ - irisData.setRightIrisCode2(result); - irisData.setRightImage2(fileName); - } - i++; - }else { - return ResponseData.error("获取虹膜编码失败,请重试"); - } - } else { - return ResponseData.error("图像为空"); - } + String leftFilePath1 = this.filePath+personId+"_left_1.bmp"; + String leftFilePath2 = this.filePath+personId+"_left_2.bmp"; + String rightFilePath1 = this.filePath+personId+"_right_1.bmp"; + String rightFilePath2 = this.filePath+personId+"_right_2.bmp"; + if(!Base64Util.Base64ToImage(image_zy0,leftFilePath1)){ + return ResponseData.error("左眼图像1转换失败"); } + if(!Base64Util.Base64ToImage(image_zy1,leftFilePath2)){ + return ResponseData.error("左眼图像2转换失败"); + } + if(!Base64Util.Base64ToImage(image_yy0,rightFilePath1 )){ + return ResponseData.error("右眼图像1转换失败"); + } + if(!Base64Util.Base64ToImage(image_yy1,rightFilePath2)){ + return ResponseData.error("右眼图像2转换失败"); + } + + + BASE64Decoder decoder = new BASE64Decoder(); + //左眼1 + byte[] imageBytes = decoder.decodeBuffer(image_zy0); + InputStream fis = new ByteArrayInputStream(imageBytes); + byte[] leftCode1 = getIrisCode(fis); + if(leftCode1 ==null || leftCode1.length!=1024){ + return ResponseData.error("左眼图像1编码失败"); + } + //左眼2 + imageBytes = decoder.decodeBuffer(image_zy1); + fis = new ByteArrayInputStream(imageBytes); + byte[] leftCode2 = getIrisCode(fis); + if(leftCode2==null || leftCode2.length!=1024){ + return ResponseData.error("左眼图像2编码失败"); + } + //右眼1 + imageBytes = decoder.decodeBuffer(image_yy0); + fis = new ByteArrayInputStream(imageBytes); + byte[] rightCode1 = getIrisCode(fis); + if(rightCode1==null || rightCode1.length!=1024){ + return ResponseData.error("右眼图像1编码失败"); + } + //右眼2 + imageBytes = decoder.decodeBuffer(image_yy1); + fis = new ByteArrayInputStream(imageBytes); + byte[] rightCode2 = getIrisCode(fis); + if(rightCode2==null || rightCode2.length!=1024){ + return ResponseData.error("右眼图像2编码失败"); + } + + irisData.setLeftIrisCode1(leftCode1); + irisData.setLeftIrisCode2(leftCode2); + irisData.setRightIrisCode1(rightCode1); + irisData.setRightIrisCode2(rightCode2); + + irisData.setLeftImage1(leftFilePath1); + irisData.setLeftImage2(leftFilePath2); + irisData.setRightImage1(rightFilePath1); + irisData.setRightImage2(rightFilePath2); irisData.setIdCardNo(idCardNo); irisData.setPersonId(Long.valueOf(personId)); @@ -117,60 +132,75 @@ */ @RequestMapping(value = "/update") @ResponseBody - public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + public Object imageUpload(@RequestParam("image_zy0")String image_zy0,@RequestParam("image_zy1")String image_zy1,@RequestParam("image_yy0")String image_yy0,@RequestParam("image_yy1")String image_yy1,@RequestParam("personId")String personId) throws IOException { Map map = null; map = irisDataService.selectByPersonId(personId); if(map!=null){ return ResponseData.error("不存在该记录"); } - - if(images.size()!=4){ - return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + if(ToolUtil.isEmpty(image_zy0)||ToolUtil.isEmpty(image_zy1) || ToolUtil.isEmpty(image_yy0) || ToolUtil.isEmpty(image_yy1)){ + return ResponseData.error("有图像为空"); } IrisData irisData = irisDataService.selectById(map.get("id").toString()); - int i = 0; - for (MultipartFile image : images) { - if (!image.isEmpty()) { - InputStream fis = image.getInputStream(); - byte[] result = getIrisCode(fis); - if(result != null && result.length==1024){ - String fileName=""; - if(i==0) fileName = irisData.getLeftImage1(); - else if(i==1)fileName= irisData.getLeftImage2(); - else if(i==2)fileName= irisData.getRightImage1(); - else if(i==3)fileName= irisData.getRightImage2(); - - String pathName = this.filePath + fileName; - File dir = new File(this.filePath); - if (!dir.exists()) { - dir.mkdirs(); - //logger.info("创建文件夹路径为:{}", dir.getPath()); - } - - image.transferTo(new File(pathName)); - - if(i==0) { - irisData.setLeftIrisCode1(result); - } - else if(i==1) { - irisData.setLeftIrisCode2(result); - } - else if(i==2) { - irisData.setRightIrisCode1(result); - } - else if(i==3){ - irisData.setRightIrisCode2(result); - } - i++; - }else { - return ResponseData.error("获取虹膜编码失败,请重试"); - } - } else { - return ResponseData.error("图像为空"); - } + String leftFilePath1 = this.filePath+personId+"_left_1.bmp"; + String leftFilePath2 = this.filePath+personId+"_left_2.bmp"; + String rightFilePath1 = this.filePath+personId+"_right_1.bmp"; + String rightFilePath2 = this.filePath+personId+"_right_2.bmp"; + if(!Base64Util.Base64ToImage(image_zy0,leftFilePath1)){ + return ResponseData.error("左眼图像1转换失败"); } + if(!Base64Util.Base64ToImage(image_zy1,leftFilePath2)){ + return ResponseData.error("左眼图像2转换失败"); + } + if(!Base64Util.Base64ToImage(image_yy0,rightFilePath1 )){ + return ResponseData.error("右眼图像1转换失败"); + } + if(!Base64Util.Base64ToImage(image_yy1,rightFilePath2)){ + return ResponseData.error("右眼图像2转换失败"); + } + + + BASE64Decoder decoder = new BASE64Decoder(); + //左眼1 + byte[] imageBytes = decoder.decodeBuffer(image_zy0); + InputStream fis = new ByteArrayInputStream(imageBytes); + byte[] leftCode1 = getIrisCode(fis); + if(leftCode1 ==null || leftCode1.length!=1024){ + return ResponseData.error("左眼图像1编码失败"); + } + //左眼2 + imageBytes = decoder.decodeBuffer(image_zy1); + fis = new ByteArrayInputStream(imageBytes); + byte[] leftCode2 = getIrisCode(fis); + if(leftCode2==null || leftCode2.length!=1024){ + return ResponseData.error("左眼图像2编码失败"); + } + //右眼1 + imageBytes = decoder.decodeBuffer(image_yy0); + fis = new ByteArrayInputStream(imageBytes); + byte[] rightCode1 = getIrisCode(fis); + if(rightCode1==null || rightCode1.length!=1024){ + return ResponseData.error("右眼图像1编码失败"); + } + //右眼2 + imageBytes = decoder.decodeBuffer(image_yy1); + fis = new ByteArrayInputStream(imageBytes); + byte[] rightCode2 = getIrisCode(fis); + if(rightCode2==null || rightCode2.length!=1024){ + return ResponseData.error("右眼图像2编码失败"); + } + + irisData.setLeftIrisCode1(leftCode1); + irisData.setLeftIrisCode2(leftCode2); + irisData.setRightIrisCode1(rightCode1); + irisData.setRightIrisCode2(rightCode2); + + irisData.setLeftImage1(leftFilePath1); + irisData.setLeftImage2(leftFilePath2); + irisData.setRightImage1(rightFilePath1); + irisData.setRightImage2(rightFilePath2); irisDataService.updateById(irisData); return ResponseData.success(); @@ -231,7 +261,7 @@ byte[] irisCode = new byte[1024]; //1.创建客户端Socket,指定服务器地址和端口 - Socket socket=new Socket("localhost", 8888); + Socket socket=new Socket("localhost", 20005); //2.获取输出流,向服务器端发送信息 OutputStream os=socket.getOutputStream();//字节输出流 diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java index 661b089..44daa06 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -4,8 +4,10 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.register.model.IrisData; import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.util.Base64Util; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -25,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; +import sun.misc.BASE64Decoder; /** * 控制器 @@ -47,64 +50,76 @@ */ @RequestMapping(value = "/add") @ResponseBody - public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + public Object imageUpload(@RequestParam("image_zy0")String image_zy0,@RequestParam("image_zy1")String image_zy1,@RequestParam("image_yy0")String image_yy0,@RequestParam("image_yy1")String image_yy1,@RequestParam("personId")String personId,String idCardNo) throws IOException { Map map = null; map = irisDataService.selectByPersonId(personId); if(map!=null){ - return ResponseData.error("已注册过该人员的虹膜数据"); + return ResponseData.error("已存在该人员的虹膜数据"); } - if(images.size()!=4){ - return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + if(ToolUtil.isEmpty(image_zy0)||ToolUtil.isEmpty(image_zy1) || ToolUtil.isEmpty(image_yy0) || ToolUtil.isEmpty(image_yy1)){ + return ResponseData.error("有图像为空"); } IrisData irisData = new IrisData(); - int i = 0; - for (MultipartFile image : images) { - if (!image.isEmpty()) { - InputStream fis = image.getInputStream(); - byte[] result = getIrisCode(fis); - if(result != null && result.length==1024){ - String fileName=""; - if(i==0) fileName = personId+"_left_1.bmp"; - else if(i==1)fileName=personId+"_left_2.bmp"; - else if(i==2)fileName=personId+"_right_1.bmp"; - else if(i==3)fileName=personId+"_right_2.bmp"; - - String pathName = this.filePath + fileName; - File dir = new File(this.filePath); - if (!dir.exists()) { - dir.mkdirs(); - //logger.info("创建文件夹路径为:{}", dir.getPath()); - } - - image.transferTo(new File(pathName)); - - if(i==0) { - irisData.setLeftIrisCode1(result); - irisData.setLeftImage1(fileName); - } - else if(i==1) { - irisData.setLeftIrisCode2(result); - irisData.setLeftImage2(fileName); - } - else if(i==2) { - irisData.setRightIrisCode1(result); - irisData.setRightImage1(fileName); - } - else if(i==3){ - irisData.setRightIrisCode2(result); - irisData.setRightImage2(fileName); - } - i++; - }else { - return ResponseData.error("获取虹膜编码失败,请重试"); - } - } else { - return ResponseData.error("图像为空"); - } + String leftFilePath1 = this.filePath+personId+"_left_1.bmp"; + String leftFilePath2 = this.filePath+personId+"_left_2.bmp"; + String rightFilePath1 = this.filePath+personId+"_right_1.bmp"; + String rightFilePath2 = this.filePath+personId+"_right_2.bmp"; + if(!Base64Util.Base64ToImage(image_zy0,leftFilePath1)){ + return ResponseData.error("左眼图像1转换失败"); } + if(!Base64Util.Base64ToImage(image_zy1,leftFilePath2)){ + return ResponseData.error("左眼图像2转换失败"); + } + if(!Base64Util.Base64ToImage(image_yy0,rightFilePath1 )){ + return ResponseData.error("右眼图像1转换失败"); + } + if(!Base64Util.Base64ToImage(image_yy1,rightFilePath2)){ + return ResponseData.error("右眼图像2转换失败"); + } + + + BASE64Decoder decoder = new BASE64Decoder(); + //左眼1 + byte[] imageBytes = decoder.decodeBuffer(image_zy0); + InputStream fis = new ByteArrayInputStream(imageBytes); + byte[] leftCode1 = getIrisCode(fis); + if(leftCode1 ==null || leftCode1.length!=1024){ + return ResponseData.error("左眼图像1编码失败"); + } + //左眼2 + imageBytes = decoder.decodeBuffer(image_zy1); + fis = new ByteArrayInputStream(imageBytes); + byte[] leftCode2 = getIrisCode(fis); + if(leftCode2==null || leftCode2.length!=1024){ + return ResponseData.error("左眼图像2编码失败"); + } + //右眼1 + imageBytes = decoder.decodeBuffer(image_yy0); + fis = new ByteArrayInputStream(imageBytes); + byte[] rightCode1 = getIrisCode(fis); + if(rightCode1==null || rightCode1.length!=1024){ + return ResponseData.error("右眼图像1编码失败"); + } + //右眼2 + imageBytes = decoder.decodeBuffer(image_yy1); + fis = new ByteArrayInputStream(imageBytes); + byte[] rightCode2 = getIrisCode(fis); + if(rightCode2==null || rightCode2.length!=1024){ + return ResponseData.error("右眼图像2编码失败"); + } + + irisData.setLeftIrisCode1(leftCode1); + irisData.setLeftIrisCode2(leftCode2); + irisData.setRightIrisCode1(rightCode1); + irisData.setRightIrisCode2(rightCode2); + + irisData.setLeftImage1(leftFilePath1); + irisData.setLeftImage2(leftFilePath2); + irisData.setRightImage1(rightFilePath1); + irisData.setRightImage2(rightFilePath2); irisData.setIdCardNo(idCardNo); irisData.setPersonId(Long.valueOf(personId)); @@ -117,60 +132,75 @@ */ @RequestMapping(value = "/update") @ResponseBody - public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + public Object imageUpload(@RequestParam("image_zy0")String image_zy0,@RequestParam("image_zy1")String image_zy1,@RequestParam("image_yy0")String image_yy0,@RequestParam("image_yy1")String image_yy1,@RequestParam("personId")String personId) throws IOException { Map map = null; map = irisDataService.selectByPersonId(personId); if(map!=null){ return ResponseData.error("不存在该记录"); } - - if(images.size()!=4){ - return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + if(ToolUtil.isEmpty(image_zy0)||ToolUtil.isEmpty(image_zy1) || ToolUtil.isEmpty(image_yy0) || ToolUtil.isEmpty(image_yy1)){ + return ResponseData.error("有图像为空"); } IrisData irisData = irisDataService.selectById(map.get("id").toString()); - int i = 0; - for (MultipartFile image : images) { - if (!image.isEmpty()) { - InputStream fis = image.getInputStream(); - byte[] result = getIrisCode(fis); - if(result != null && result.length==1024){ - String fileName=""; - if(i==0) fileName = irisData.getLeftImage1(); - else if(i==1)fileName= irisData.getLeftImage2(); - else if(i==2)fileName= irisData.getRightImage1(); - else if(i==3)fileName= irisData.getRightImage2(); - - String pathName = this.filePath + fileName; - File dir = new File(this.filePath); - if (!dir.exists()) { - dir.mkdirs(); - //logger.info("创建文件夹路径为:{}", dir.getPath()); - } - - image.transferTo(new File(pathName)); - - if(i==0) { - irisData.setLeftIrisCode1(result); - } - else if(i==1) { - irisData.setLeftIrisCode2(result); - } - else if(i==2) { - irisData.setRightIrisCode1(result); - } - else if(i==3){ - irisData.setRightIrisCode2(result); - } - i++; - }else { - return ResponseData.error("获取虹膜编码失败,请重试"); - } - } else { - return ResponseData.error("图像为空"); - } + String leftFilePath1 = this.filePath+personId+"_left_1.bmp"; + String leftFilePath2 = this.filePath+personId+"_left_2.bmp"; + String rightFilePath1 = this.filePath+personId+"_right_1.bmp"; + String rightFilePath2 = this.filePath+personId+"_right_2.bmp"; + if(!Base64Util.Base64ToImage(image_zy0,leftFilePath1)){ + return ResponseData.error("左眼图像1转换失败"); } + if(!Base64Util.Base64ToImage(image_zy1,leftFilePath2)){ + return ResponseData.error("左眼图像2转换失败"); + } + if(!Base64Util.Base64ToImage(image_yy0,rightFilePath1 )){ + return ResponseData.error("右眼图像1转换失败"); + } + if(!Base64Util.Base64ToImage(image_yy1,rightFilePath2)){ + return ResponseData.error("右眼图像2转换失败"); + } + + + BASE64Decoder decoder = new BASE64Decoder(); + //左眼1 + byte[] imageBytes = decoder.decodeBuffer(image_zy0); + InputStream fis = new ByteArrayInputStream(imageBytes); + byte[] leftCode1 = getIrisCode(fis); + if(leftCode1 ==null || leftCode1.length!=1024){ + return ResponseData.error("左眼图像1编码失败"); + } + //左眼2 + imageBytes = decoder.decodeBuffer(image_zy1); + fis = new ByteArrayInputStream(imageBytes); + byte[] leftCode2 = getIrisCode(fis); + if(leftCode2==null || leftCode2.length!=1024){ + return ResponseData.error("左眼图像2编码失败"); + } + //右眼1 + imageBytes = decoder.decodeBuffer(image_yy0); + fis = new ByteArrayInputStream(imageBytes); + byte[] rightCode1 = getIrisCode(fis); + if(rightCode1==null || rightCode1.length!=1024){ + return ResponseData.error("右眼图像1编码失败"); + } + //右眼2 + imageBytes = decoder.decodeBuffer(image_yy1); + fis = new ByteArrayInputStream(imageBytes); + byte[] rightCode2 = getIrisCode(fis); + if(rightCode2==null || rightCode2.length!=1024){ + return ResponseData.error("右眼图像2编码失败"); + } + + irisData.setLeftIrisCode1(leftCode1); + irisData.setLeftIrisCode2(leftCode2); + irisData.setRightIrisCode1(rightCode1); + irisData.setRightIrisCode2(rightCode2); + + irisData.setLeftImage1(leftFilePath1); + irisData.setLeftImage2(leftFilePath2); + irisData.setRightImage1(rightFilePath1); + irisData.setRightImage2(rightFilePath2); irisDataService.updateById(irisData); return ResponseData.success(); @@ -231,7 +261,7 @@ byte[] irisCode = new byte[1024]; //1.创建客户端Socket,指定服务器地址和端口 - Socket socket=new Socket("localhost", 8888); + Socket socket=new Socket("localhost", 20005); //2.获取输出流,向服务器端发送信息 OutputStream os=socket.getOutputStream();//字节输出流 diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/util/Base64Util.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/util/Base64Util.java new file mode 100644 index 0000000..005f71d --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/util/Base64Util.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.register.util; + +import com.casic.missiles.core.util.ToolUtil; +import sun.misc.BASE64Decoder; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStream; + +public class Base64Util { + /** + * base64字符串转换成图片 + * @param imgStr base64字符串 + * @param imgFilePath 图片存放路径 + * @return + * + * @author ZHANGJL + * @dateTime 2018-02-23 14:42:17 + */ + public static boolean Base64ToImage(String imgStr,String imgFilePath) { // 对字节数组字符串进行Base64解码并生成图片 + + if (ToolUtil.isEmpty(imgStr)) // 图像数据为空 + return false; + + BASE64Decoder decoder = new BASE64Decoder(); + try { + // Base64解码 + byte[] b = decoder.decodeBuffer(imgStr); + for (int i = 0; i < b.length; ++i) { + if (b[i] < 0) {// 调整异常数据 + b[i] += 256; + } + } + + //如果已存在图像,先删除 + File name = new File(imgFilePath); + if( name.exists() && name.isFile()){ + name.delete(); + } + OutputStream out = new FileOutputStream(imgFilePath); + out.write(b); + out.flush(); + out.close(); + + return true; + } catch (Exception e) { + return false; + } + + } + +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java index 661b089..44daa06 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -4,8 +4,10 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.register.model.IrisData; import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.util.Base64Util; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -25,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; +import sun.misc.BASE64Decoder; /** * 控制器 @@ -47,64 +50,76 @@ */ @RequestMapping(value = "/add") @ResponseBody - public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + public Object imageUpload(@RequestParam("image_zy0")String image_zy0,@RequestParam("image_zy1")String image_zy1,@RequestParam("image_yy0")String image_yy0,@RequestParam("image_yy1")String image_yy1,@RequestParam("personId")String personId,String idCardNo) throws IOException { Map map = null; map = irisDataService.selectByPersonId(personId); if(map!=null){ - return ResponseData.error("已注册过该人员的虹膜数据"); + return ResponseData.error("已存在该人员的虹膜数据"); } - if(images.size()!=4){ - return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + if(ToolUtil.isEmpty(image_zy0)||ToolUtil.isEmpty(image_zy1) || ToolUtil.isEmpty(image_yy0) || ToolUtil.isEmpty(image_yy1)){ + return ResponseData.error("有图像为空"); } IrisData irisData = new IrisData(); - int i = 0; - for (MultipartFile image : images) { - if (!image.isEmpty()) { - InputStream fis = image.getInputStream(); - byte[] result = getIrisCode(fis); - if(result != null && result.length==1024){ - String fileName=""; - if(i==0) fileName = personId+"_left_1.bmp"; - else if(i==1)fileName=personId+"_left_2.bmp"; - else if(i==2)fileName=personId+"_right_1.bmp"; - else if(i==3)fileName=personId+"_right_2.bmp"; - - String pathName = this.filePath + fileName; - File dir = new File(this.filePath); - if (!dir.exists()) { - dir.mkdirs(); - //logger.info("创建文件夹路径为:{}", dir.getPath()); - } - - image.transferTo(new File(pathName)); - - if(i==0) { - irisData.setLeftIrisCode1(result); - irisData.setLeftImage1(fileName); - } - else if(i==1) { - irisData.setLeftIrisCode2(result); - irisData.setLeftImage2(fileName); - } - else if(i==2) { - irisData.setRightIrisCode1(result); - irisData.setRightImage1(fileName); - } - else if(i==3){ - irisData.setRightIrisCode2(result); - irisData.setRightImage2(fileName); - } - i++; - }else { - return ResponseData.error("获取虹膜编码失败,请重试"); - } - } else { - return ResponseData.error("图像为空"); - } + String leftFilePath1 = this.filePath+personId+"_left_1.bmp"; + String leftFilePath2 = this.filePath+personId+"_left_2.bmp"; + String rightFilePath1 = this.filePath+personId+"_right_1.bmp"; + String rightFilePath2 = this.filePath+personId+"_right_2.bmp"; + if(!Base64Util.Base64ToImage(image_zy0,leftFilePath1)){ + return ResponseData.error("左眼图像1转换失败"); } + if(!Base64Util.Base64ToImage(image_zy1,leftFilePath2)){ + return ResponseData.error("左眼图像2转换失败"); + } + if(!Base64Util.Base64ToImage(image_yy0,rightFilePath1 )){ + return ResponseData.error("右眼图像1转换失败"); + } + if(!Base64Util.Base64ToImage(image_yy1,rightFilePath2)){ + return ResponseData.error("右眼图像2转换失败"); + } + + + BASE64Decoder decoder = new BASE64Decoder(); + //左眼1 + byte[] imageBytes = decoder.decodeBuffer(image_zy0); + InputStream fis = new ByteArrayInputStream(imageBytes); + byte[] leftCode1 = getIrisCode(fis); + if(leftCode1 ==null || leftCode1.length!=1024){ + return ResponseData.error("左眼图像1编码失败"); + } + //左眼2 + imageBytes = decoder.decodeBuffer(image_zy1); + fis = new ByteArrayInputStream(imageBytes); + byte[] leftCode2 = getIrisCode(fis); + if(leftCode2==null || leftCode2.length!=1024){ + return ResponseData.error("左眼图像2编码失败"); + } + //右眼1 + imageBytes = decoder.decodeBuffer(image_yy0); + fis = new ByteArrayInputStream(imageBytes); + byte[] rightCode1 = getIrisCode(fis); + if(rightCode1==null || rightCode1.length!=1024){ + return ResponseData.error("右眼图像1编码失败"); + } + //右眼2 + imageBytes = decoder.decodeBuffer(image_yy1); + fis = new ByteArrayInputStream(imageBytes); + byte[] rightCode2 = getIrisCode(fis); + if(rightCode2==null || rightCode2.length!=1024){ + return ResponseData.error("右眼图像2编码失败"); + } + + irisData.setLeftIrisCode1(leftCode1); + irisData.setLeftIrisCode2(leftCode2); + irisData.setRightIrisCode1(rightCode1); + irisData.setRightIrisCode2(rightCode2); + + irisData.setLeftImage1(leftFilePath1); + irisData.setLeftImage2(leftFilePath2); + irisData.setRightImage1(rightFilePath1); + irisData.setRightImage2(rightFilePath2); irisData.setIdCardNo(idCardNo); irisData.setPersonId(Long.valueOf(personId)); @@ -117,60 +132,75 @@ */ @RequestMapping(value = "/update") @ResponseBody - public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + public Object imageUpload(@RequestParam("image_zy0")String image_zy0,@RequestParam("image_zy1")String image_zy1,@RequestParam("image_yy0")String image_yy0,@RequestParam("image_yy1")String image_yy1,@RequestParam("personId")String personId) throws IOException { Map map = null; map = irisDataService.selectByPersonId(personId); if(map!=null){ return ResponseData.error("不存在该记录"); } - - if(images.size()!=4){ - return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + if(ToolUtil.isEmpty(image_zy0)||ToolUtil.isEmpty(image_zy1) || ToolUtil.isEmpty(image_yy0) || ToolUtil.isEmpty(image_yy1)){ + return ResponseData.error("有图像为空"); } IrisData irisData = irisDataService.selectById(map.get("id").toString()); - int i = 0; - for (MultipartFile image : images) { - if (!image.isEmpty()) { - InputStream fis = image.getInputStream(); - byte[] result = getIrisCode(fis); - if(result != null && result.length==1024){ - String fileName=""; - if(i==0) fileName = irisData.getLeftImage1(); - else if(i==1)fileName= irisData.getLeftImage2(); - else if(i==2)fileName= irisData.getRightImage1(); - else if(i==3)fileName= irisData.getRightImage2(); - - String pathName = this.filePath + fileName; - File dir = new File(this.filePath); - if (!dir.exists()) { - dir.mkdirs(); - //logger.info("创建文件夹路径为:{}", dir.getPath()); - } - - image.transferTo(new File(pathName)); - - if(i==0) { - irisData.setLeftIrisCode1(result); - } - else if(i==1) { - irisData.setLeftIrisCode2(result); - } - else if(i==2) { - irisData.setRightIrisCode1(result); - } - else if(i==3){ - irisData.setRightIrisCode2(result); - } - i++; - }else { - return ResponseData.error("获取虹膜编码失败,请重试"); - } - } else { - return ResponseData.error("图像为空"); - } + String leftFilePath1 = this.filePath+personId+"_left_1.bmp"; + String leftFilePath2 = this.filePath+personId+"_left_2.bmp"; + String rightFilePath1 = this.filePath+personId+"_right_1.bmp"; + String rightFilePath2 = this.filePath+personId+"_right_2.bmp"; + if(!Base64Util.Base64ToImage(image_zy0,leftFilePath1)){ + return ResponseData.error("左眼图像1转换失败"); } + if(!Base64Util.Base64ToImage(image_zy1,leftFilePath2)){ + return ResponseData.error("左眼图像2转换失败"); + } + if(!Base64Util.Base64ToImage(image_yy0,rightFilePath1 )){ + return ResponseData.error("右眼图像1转换失败"); + } + if(!Base64Util.Base64ToImage(image_yy1,rightFilePath2)){ + return ResponseData.error("右眼图像2转换失败"); + } + + + BASE64Decoder decoder = new BASE64Decoder(); + //左眼1 + byte[] imageBytes = decoder.decodeBuffer(image_zy0); + InputStream fis = new ByteArrayInputStream(imageBytes); + byte[] leftCode1 = getIrisCode(fis); + if(leftCode1 ==null || leftCode1.length!=1024){ + return ResponseData.error("左眼图像1编码失败"); + } + //左眼2 + imageBytes = decoder.decodeBuffer(image_zy1); + fis = new ByteArrayInputStream(imageBytes); + byte[] leftCode2 = getIrisCode(fis); + if(leftCode2==null || leftCode2.length!=1024){ + return ResponseData.error("左眼图像2编码失败"); + } + //右眼1 + imageBytes = decoder.decodeBuffer(image_yy0); + fis = new ByteArrayInputStream(imageBytes); + byte[] rightCode1 = getIrisCode(fis); + if(rightCode1==null || rightCode1.length!=1024){ + return ResponseData.error("右眼图像1编码失败"); + } + //右眼2 + imageBytes = decoder.decodeBuffer(image_yy1); + fis = new ByteArrayInputStream(imageBytes); + byte[] rightCode2 = getIrisCode(fis); + if(rightCode2==null || rightCode2.length!=1024){ + return ResponseData.error("右眼图像2编码失败"); + } + + irisData.setLeftIrisCode1(leftCode1); + irisData.setLeftIrisCode2(leftCode2); + irisData.setRightIrisCode1(rightCode1); + irisData.setRightIrisCode2(rightCode2); + + irisData.setLeftImage1(leftFilePath1); + irisData.setLeftImage2(leftFilePath2); + irisData.setRightImage1(rightFilePath1); + irisData.setRightImage2(rightFilePath2); irisDataService.updateById(irisData); return ResponseData.success(); @@ -231,7 +261,7 @@ byte[] irisCode = new byte[1024]; //1.创建客户端Socket,指定服务器地址和端口 - Socket socket=new Socket("localhost", 8888); + Socket socket=new Socket("localhost", 20005); //2.获取输出流,向服务器端发送信息 OutputStream os=socket.getOutputStream();//字节输出流 diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/util/Base64Util.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/util/Base64Util.java new file mode 100644 index 0000000..005f71d --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/util/Base64Util.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.register.util; + +import com.casic.missiles.core.util.ToolUtil; +import sun.misc.BASE64Decoder; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStream; + +public class Base64Util { + /** + * base64字符串转换成图片 + * @param imgStr base64字符串 + * @param imgFilePath 图片存放路径 + * @return + * + * @author ZHANGJL + * @dateTime 2018-02-23 14:42:17 + */ + public static boolean Base64ToImage(String imgStr,String imgFilePath) { // 对字节数组字符串进行Base64解码并生成图片 + + if (ToolUtil.isEmpty(imgStr)) // 图像数据为空 + return false; + + BASE64Decoder decoder = new BASE64Decoder(); + try { + // Base64解码 + byte[] b = decoder.decodeBuffer(imgStr); + for (int i = 0; i < b.length; ++i) { + if (b[i] < 0) {// 调整异常数据 + b[i] += 256; + } + } + + //如果已存在图像,先删除 + File name = new File(imgFilePath); + if( name.exists() && name.isFile()){ + name.delete(); + } + OutputStream out = new FileOutputStream(imgFilePath); + out.write(b); + out.flush(); + out.close(); + + return true; + } catch (Exception e) { + return false; + } + + } + +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java index 5e9403d..cacab32 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java @@ -33,7 +33,7 @@ //解密身份证号 if (!ToolUtil.isEmpty(map.get("idCardNo"))) { - String idCardNo = formatter.format(map.get("createTime")); + String idCardNo = map.get("idCardNo").toString(); map.put("idCardNo",idCardNo); } //眼部图片加路径