1. 作者:LoveEmperor-王子様
  2. HTML:
  3. <!DOCTYPE HTML>
  4. <html xmlns:th="http://www.thymeleaf.org" xmlns:v-on="http://www.w3.org/1999/xhtml"
  5. xmlns:v-bind="http://www.w3.org/1999/xhtml">
  6. <head>
  7. <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"/>
  8. <title>实名认证</title>
  9. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  10. <link rel="stylesheet" th:href="@{/css/common/ionic.css}" />
  11. <link th:href="@{/css/common/mainstyle.css}" rel="stylesheet"/>
  12. <link th:href="@{/css/common/common.css}" rel="stylesheet"/>
  13. <script th:src="@{/js/jquery/jquery.min.js}"></script>
  14. <script type="text/javascript" th:src="@{/js/jq_validate.js}"></script>
  15. <script th:src="@{/js/vue/vue.min.js}"></script>
  16. <script th:src="@{/js/vue/vue-resource.min.js}"></script>
  17. </head>
  18. <body>
  19. <!-- <p th:text="'Hello, ' + ${name} + '!'" /> -->
  20. <div class="bar bar-header bar-dark" style="line-height: 30px">
  21. <h1 class="title">
  22. 实名认证
  23. </h1>
  24. <!--<i class="ion-android-more-vertical " style="font-size: 17px;margin-right: 10px;float: right"></i>-->
  25. </div>
  26. <div class="bar bar-subheader bar-dark" style="height: 100px;width: 100%;text-align: center">
  27. <div class="step">
  28. <div class="row row-center font-12">
  29. <div class="col">
  30. <span class="green_step">1</span>
  31. <i class="float-r green_step"></i>
  32. </div>
  33. <div class="col">
  34. <i class="float-l green_step"></i>
  35. <span class="green_step">2</span>
  36. <i class="float-r green_step"></i>
  37. </div>
  38. <div class="col">
  39. <i class="float-l green_step"></i>
  40. <span class="green_stepplus">
  41. <span class="green_step">3</span>
  42. </span>
  43. <i class="float-r"></i>
  44. </div>
  45. <div class="col">
  46. <i class="float-l"></i>
  47. <span>4</span>
  48. </div>
  49. </div>
  50. <div class="row row-center font-12">
  51. <div class="col bule">
  52. 填写资料
  53. </div>
  54. <div class="col bule">
  55. 押金交纳
  56. </div>
  57. <div class="col bule">
  58. 实名认证
  59. </div>
  60. <div class="col">
  61. 扫码激活
  62. </div>
  63. </div>
  64. </div>
  65. </div>
  66. <div class="list">
  67. <div id="authendiv" v-show="authenshow" class="list" style="margin-top: 150px;width: 100%">
  68. <form id="uploadForm" enctype="multipart/form-data" method="POST" action="../identification/certification.fgl">
  69. <div class="picbox bg-white">
  70. <div class="row ">
  71. <div class="col img-row">
  72. <img alt="" v-bind:src="frontimg" width="100%" class="has_img"
  73. style="z-index: 100;top: 1rem"/>
  74. <input type="file" name="mIdCard" id="frontimgInput" v-on:change="onFileChangefront"
  75. accept="image/*"
  76. style="top: 3.2rem;left: 3.4rem;width: 30%;z-index: 1;position: absolute;opacity: 0;border: none;cursor: pointer;"/>
  77. </div>
  78. <div class="col img-row">
  79. <img alt="" v-bind:src="frontimg2" width="100%" class="has_img" style="z-index: 100;top: 1rem"/>
  80. </div>
  81. </div>
  82. <div class="row text-row" style="font-size: 15px">
  83. <div class="col">身份证正面照</div>
  84. <div class="col">实例图</div>
  85. </div>
  86. <div class="row " >
  87. <div class="col img-row">
  88. <!-- accept="image/*" -->
  89. <!-- accept="image/png, image/jpeg, image/jpg" -->
  90. <img v-bind:src="backimg" alt="" width="100%" class="has_img" style="z-index: 100"/>
  91. <input type="file" name="mVehicleLicence" id="backimgInput"  accept="image/*"
  92. v-on:change="onFileChangeback"
  93. style="z-index: 1;cursor: pointer;top: 13.8rem;left: 3.4rem;position: absolute;width: 30%;border: none;opacity: 0;cursor: pointer;"/>
  94. </div>
  95. <div class="col img-row">
  96. <img alt="" v-bind:src="backimg2" width="100%" class="has_img" style="z-index: 100"/>
  97. </div>
  98. </div>
  99. <input type="hidden" v-model="plateNumber" name="plateNumber"/>
  100. <div class="row text-row" style="font-size: 15px">
  101. <div class="col" style="font-size: 15px">行驶证正面</div>
  102. <div class="col" style="font-size: 15px">实例图</div>
  103. </div>
  104. </div>
  105. <div style="margin-top: 5px;margin-right: 20px;margin-left: 20px">
  106. <input class="button button-block button-positive" type="button" value="提交审核" v-on:click="surebtn()"/>
  107. <p style="margin-top: 10px;color: #A8A8A8;font-size: 13px">证件上文字清晰可识别,支持JPG,PNG格式</p>
  108. </div>
  109. </form>
  110. </div>
  111. </div>
  112. </body>
  113. <script th:inline="javascript">
  114. var valid = new ValidateFn();
  115. var authendiv = new Vue({
  116. el: "#authendiv",
  117. data: {
  118. authenshow: true,
  119. frontimg: '../img/common/idcard1.png',
  120. frontimg2: '../img/common/idcard2.jpg',
  121. backimg: '../img/common/driving1.png',
  122. backimg2: '../img/common/driving2.jpg',
  123. plateNumber: window.localStorage.getItem("plateNumber")
  124. },
  125. methods: {
  126. onFileChangefront(e) {
  127. var files = e.target.files || e.dataTransfer.files;
  128. if (!files.length) return;
  129. this.createImagefront(files);
  130. },
  131. createImagefront(file) {
  132. if (typeof FileReader === 'undefined') {
  133. return false;
  134. }
  135. var image = new Image();
  136. var vm = this;
  137. var leng = file.length;
  138. var reader = new FileReader();
  139. reader.readAsDataURL(file[0]);
  140. reader.onload = function (e) {
  141. vm.frontimg = ((e.target.result));
  142. };
  143. },
  144. onFileChangeback(e) {
  145. var files = e.target.files || e.dataTransfer.files;
  146. if (!files.length) return;
  147. this.createImageback(files);
  148. },
  149. createImageback(file) {
  150. if (typeof FileReader === 'undefined') {
  151. return false;
  152. }
  153. var image = new Image();
  154. var vm = this;
  155. var leng = file.length;
  156. var reader = new FileReader();
  157. reader.readAsDataURL(file[0]);
  158. reader.onload = function (e) {
  159. vm.backimg = ((e.target.result));
  160. };
  161. },
  162. surebtn: function () {
  163. if ($("#frontimgInput").val() == null || $("#frontimgInput").val() == 0){
  164. valid.messageShowFn("请选择身份证正面照",30);
  165. return false;
  166. }
  167. if ($("#backimgInput").val() == null || $("#backimgInput").val() == 0){
  168. valid.messageShowFn("请选择行驶证正面照",30);
  169. return false;
  170. }
  171. $("#uploadForm").submit();
  172. }
  173. }
  174. })
  175. var inreview = new Vue({
  176. el: "#inreview",
  177. data: {
  178. inreviewshow: true
  179. }
  180. })
  181. if([[${warning}]] !=null){
  182. valid.messageShowFn([[${warning}]],15);
  183. }
  184. </script>
  185. </html>
  186. java:
  187. /**
  188. * 实名认证
  189. * @param name
  190. * @param model
  191. * @return
  192. * @throws Exception
  193. */
  194. @RequestMapping(value = "/identification/certification.fgl", method = RequestMethod.POST)
  195. public String handleFileUpload(@RequestParam("mVehicleLicence") MultipartFile mVehicleLicence,
  196. @RequestParam("mIdCard") MultipartFile mIdCard, @RequestParam("plateNumber") String plateNumber,
  197. Model model) throws Exception {
  198. File idCard = File.createTempFile(String.format("id_%s_%s-1.jpeg", plateNumber, TimeUtils.getSysTime("yyyyMMddHHmmss")), ".jpeg");// new File(String.format("id_%s_%s.jpeg", plateNumber, TimeUtils.getSysTime("yyyyMMddHHmmss")));
  199. File vehicleLicence = File.createTempFile(String.format("lic_%s_%s-1.jpeg", plateNumber, TimeUtils.getSysTime("yyyyMMddHHmmss")), ".jpeg");//new File(String.format("lic_%s_%s.jpeg", plateNumber, TimeUtils.getSysTime("yyyyMMddHHmmss")));
  200. if (mVehicleLicence == null || mIdCard == null) {
  201. model.addAttribute("warning", "上传文件不能为空");
  202. return "identification";
  203. }
  204. if (mVehicleLicence.getSize() > GetConfig.get().getMaxUploadFile()*1024*1024
  205. || mIdCard.getSize() > GetConfig.get().getMaxUploadFile()*1024*1024) {
  206. model.addAttribute("warning",
  207. String.format("上传文件不能超过%dM", GetConfig.get().getMaxUploadFile()));
  208. return "identification";
  209. }
  210. // FileUtils.copyInputStreamToFile(mIdCard.getInputStream(), idCard);
  211. // FileUtils.copyInputStreamToFile(mVehicleLicence.getInputStream(), vehicleLicence);
  212. // log.info("idCardFile=" + idCard.getName() + ":" + mIdCard.getSize());
  213. // log.info("vehicleLicense=" + vehicleLicence.getName() + ":" + mVehicleLicence.getSize());
  214. img = ImageIO.read(mIdCard.getInputStream());      // 构造Image对象
  215. width = img.getWidth(null);    // 得到源图宽
  216. height = img.getHeight(null);  // 得到源图长
  217. BufferedImage image = new BufferedImage(375, 667,BufferedImage.TYPE_INT_RGB );
  218. image.getGraphics().drawImage(img, 0, 0, 375, 667, null); // 绘制缩小后的图
  219. //        String fname = idCard.getName().substring(0, idCard.getName().lastIndexOf("."));//新名字
  220. //ImageIO.write(image, "jpg", new File("e:/" + fname + ".jpg"));
  221. File file1 = File.createTempFile(String.format("id_%s_%s.jpeg", plateNumber, TimeUtils.getSysTime("yyyyMMddHHmmss")), ".jpeg");
  222. ImageIO.write(image, "jpg", file1);
  223. File idCard2 = new File(file1.getAbsolutePath());
  224. img2 = ImageIO.read(mVehicleLicence.getInputStream());      // 构造Image对象
  225. width2 = img2.getWidth(null);    // 得到源图宽
  226. height2 = img2.getHeight(null);  // 得到源图长
  227. BufferedImage image2 = new BufferedImage(375, 667,BufferedImage.TYPE_INT_RGB );
  228. image2.getGraphics().drawImage(img2, 0, 0, 375, 667, null); // 绘制缩小后的图
  229. //        String fname2 = vehicleLicence.getName().substring(0, vehicleLicence.getName().lastIndexOf("."));//新名字
  230. File file2 = File.createTempFile(String.format("id_%s_%s.jpeg", plateNumber, TimeUtils.getSysTime("yyyyMMddHHmmss")), ".jpeg");
  231. ImageIO.write(image2, "jpg", file2);
  232. File vehicleLicence2 = new File(file2.getAbsolutePath());
  233. CertificationCmdDTO cmd = new CertificationCmdDTO();
  234. cmd.setPlateNumber(plateNumber);
  235. cmd.getFiles().put("idCard", idCard2);
  236. cmd.getFiles().put("vehicleLicense", vehicleLicence2);
  237. AckDto<Object> ackDto = PakringServerCom.certification(cmd);
  238. if (idCard != null)
  239. idCard.deleteOnExit();
  240. if (vehicleLicence != null)
  241. vehicleLicence.deleteOnExit();
  242. if (ackDto != null) {
  243. if (ackDto.getStatus() == 200) {
  244. model.addAttribute("destatus", "up_pic");
  245. return "infoReview";
  246. } else {
  247. if (ackDto.getError_code() == ERROR_FLAG.TOKEN) {
  248. model.addAttribute("warning", "TOKEN超时");
  249. } else if (ackDto.getError_code() == ERROR_FLAG.UNKNOW_RECORD) {
  250. model.addAttribute("warning", "未知记录");
  251. } else if (ackDto.getError_code() == ERROR_FLAG.PAY) {
  252. model.addAttribute("warning", "支付押金金额不足");
  253. } else if (ackDto.getError_code() == ERROR_FLAG.WITHOUT_PAY) {
  254. model.addAttribute("warning", "请先付费");
  255. } else {
  256. model.addAttribute("warning", "未知错误1");
  257. }
  258. // return "redirect:/purchase/identification.fgl";
  259. return "identification";
  260. }
  261. } else {
  262. model.addAttribute("warning", "未知错误");
  263. }
  264. return "identification";
  265. }

MultipartFile上传图片相关推荐

  1. springMVC MultipartFile 上传图片时修改图片大小

    1.引言 服务器配置比较低,打开网站时加载1MB+的图片 速度很慢,影响客户体验.所以从网上找了java修改图片大小的方法,这里记录一下 以备以后不时之需.我这里设置的是宽240,,高135 按照16 ...

  2. java实现给MultipartFile添加水印

    接到一个新需求,上传图片后添加水印 先测试本地图片加水印 import javax.imageio.ImageIO; import java.awt.*; import java.awt.image. ...

  3. java上传图片工具类

    package com.findmiThree.utils.uploadimg;import java.io.File; import java.text.SimpleDateFormat; impo ...

  4. 文件上传MultipartFile实现图片压缩

    MultipartFile上传图片并压缩 背景 之前写过一个图片上传,使用了spring的MultipartFile实现的,比较简单,限制了1M的大小,后来产品需求上传图片需压缩,遂着手开始实现 压缩 ...

  5. springmvc结合base64存取图片到mysql

    简单介绍: 1.jsp通过MultipartFile上传图片到后台 2.后台把上传的图片通过base64转换成字符串存到mysql 3.从mysql读取图片字符串,通过base64反转成byte数组, ...

  6. ajax传图片以及后台接收,Ajax上传图片,后台使用SpringBoot的MultipartFile类型接收的问题...

    Ajax很好用,但是在上传文件这边却总是会出问题.例如,现在想上传一张图片,希望前台无刷新操作,使用Ajax上传,后台接收不到相应的类型,导致上传失败,但是如果使用input和submit组合又会出现 ...

  7. Java 上传图片MultipartFile

    控制层 @ApiOperation("封面单图片上传")@RequestMapping(value = "/uplodadImg", method = {Req ...

  8. SpringBoot+WangEditor上传图片

    今天本地在调试一个问题,,wangEditor这个富文本编辑器上传图片,其实上传图片到也没有什么困难的地方,关键是在于,后台是SpringBoot来进行接收图片,,不说了直接上代码:这个是前端的代码: ...

  9. java读取服务器图片大小,SpringMVC中MultipartFile上传获取图片的宽度和高度详解

    SpringMVC一般使用MultipartFile来做文件的上传,通过MultipartFile的getContentType()方法判定文件的类型(MIME) ".doc":& ...

最新文章

  1. 【ACM】会场安排问题
  2. springboot加载外部xml_Springboot引用外部配置文件的方法步骤
  3. 自动化日志收集及分析在支付宝 App 内的演进
  4. Linux学习笔记14
  5. 构建springmvc+dubbo分布式平台-dubbo简介
  6. 路由器的分组转发算法
  7. Spring学习之路-从入门到放弃
  8. Word 里面如何设置多级标题
  9. 在windows7下给vs2015配置dirent.h头文件
  10. tensorflow(一)windows 10 python3.6安装tensorflow1.4与基本概念解读
  11. Gimp 替换白色背景
  12. 影像有理函数纠正RFM/RPC
  13. html书写表单laber,laber(labelhood是什么意思)
  14. 努比亚z11mini 使用 移动物联卡
  15. 盘点 | CES2023落幕!新能源车、显示技术、AI/元宇宙、芯片…百花齐放百家争鸣中……
  16. SWPU NSS新生赛(校外通道)
  17. python用input输入字典_python输入字典_输入字典python_python用input输入字典 - 云+社区 - 腾讯云...
  18. 站点类型、tdk布局和采集规则
  19. Java EE现状及其发展趋势
  20. unity接入实现人脸识别应用-基于虹软人脸识别算法4.0

热门文章

  1. YDOOK:Blander 2D 怎样新建图层
  2. 悄悄地上线了 | 研学分享 | 的官网~
  3. win10护眼模式的使用方法
  4. 基于Echarts柱状图做的闪烁效果
  5. Zabbix-agent 增加自定义监控项-- Ping 到目的地 IP 链路监控
  6. 腾讯-----马化腾
  7. Linux 命令tail -f | 管道条件(sed,awk)文件,不输出原因
  8. 计算机应用技术推荐笔记本,学数字媒体应用技术需要什么电脑配置?笔记本.推荐我一款?...
  9. LTE射频测试中的NS
  10. topik怎么读_TOPIK6在韩国人眼里是什么难度?