SSM框架下实现多图片上传
时间:2019-05-15
本文章向大家介绍SSM框架下实现多图片上传,主要包括SSM框架下实现多图片上传使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近在实现一个身份证件多图片上传的功能,那么我们如何基于SSM框架来实现身份证件多图片上传的功能的?下面我们来实现一下。
Controller层:
@RequestMapping("identityAuthentication.do")
public void identityAuthentication(HttpServletRequest req, HttpServletResponse resp,Tbcustomer tbcustomer,
@RequestParam(value = "picture", required = true) MultipartFile[] myFile)
throws ServletException, IOException {
resp.setContentType("text/json");
try {
int CustomerID = Integer.parseInt(req.getSession()
.getAttribute("customerID").toString());
SimpleDateFormat SDF=new SimpleDateFormat("yyyy-MM-dd HH:mm::ss");//时间格式
String uploadPath = req.getServletContext().getRealPath("/")
+ "\\Temp";
int Record = 0;
List<String> imageName = new ArrayList<String>();
tbcustomer.setCustomerid(CustomerID);
//日志新增
Tblog tblog=new Tblog();
tblog.setCustomerid(CustomerID);
tblog.setOperationbehavior("个人中心(身份认证)");
try {
tblog.setOperationdate(SDF.parse(SDF.format(System.currentTimeMillis())));//日期
} catch (ParseException e1) {
e1.printStackTrace();
}
if (myFile.length >= 2) {
try {
if (myFile != null && myFile.length > 0) {
String uploadFileName = "";
for (MultipartFile multipartFile : myFile) {
uploadFileName = ReadFileUtil
.readWriteFile(multipartFile.getInputStream(),
multipartFile.getOriginalFilename(),
uploadPath);
imageName.add(uploadFileName);
}
if (imageName.size() >= 2) {
tbcustomer.setFrontofdocument(imageName.get(0));
tbcustomer.setBackofdocument(imageName.get(1));
}
}
} catch (Exception e) {
e.printStackTrace();
}
} else{
resp.getWriter().write("{\"str\":\"请选择您所需要上传的证件图片\"}");
}
if (Record > 0) {
if (imageName.size() > 0) {
for (int i = 0; i < imageName.size(); i++) {
File oldFile = new File(uploadPath + "\\"
+ imageName.get(i));
if (oldFile.exists() && oldFile.isFile()) {
oldFile.delete();
}
}
}
}
int insert = iFrontLoginServer.insertIdentityAuthentication(tbcustomer);
int logInsert=iItemManagermentService.logAdded(tblog);
if (insert > 0) {
if(logInsert>0){
resp.getWriter().write("{\"str\":\"上传成功\"}");
}
} else {
resp.getWriter().write("{\"str\":\"上传失败\"}");
}
} catch (Exception e) {
e.printStackTrace();
resp.getWriter().write("{\"str\":\"请刷新页面后重试\"}");
}
Html页面:
<table class="my_info_content_care_table">
<tbody>
<form class="form-horizontal" id="form_UserType" action="${ctx}/FrontLogin/identityAuthentication.do" method="post" enctype="multipart/form-data">
<tr>
<td width="300" align="right" class="color555">上传身份证正面照:</td>
<td class="color555"><input class="my_info_content_care_table_file" name="picture" id="FrontOfDocument" onclick="show()" type="file"></td>
</tr>
<tr>
<td align="right" class="color555"> </td>
<td class="color555"><img id="imgcheck" width="215" height="110" src="${ctx}/assets/img/default_idcard.jpg"></td>
</tr>
<tr>
<td align="right" class="color555">上传身份证背面照:</td>
<td class="color555"><input class="my_info_content_care_table_file" name="picture" id="BackOfDocument" onclick="ShowNegativeCertificate()" type="file"></td>
</tr>
<tr>
<td align="right" class="color555"> </td>
<td class="color555"><img id="imgcheck2" width="215" height="110" src="${ctx}/assets/img/default_idcard.jpg"></td>
</tr>
<tr>
<td align="right" class="color555"> </td>
<td class="color555"><span class="color959595 margin_left10 font_size12">温馨提示:请上传JPG/GIF/PNG格式图片,文件大小请控制在1M以内!</span></td>
</tr>
</form>
<tr>
<td align="center" class="color555" colspan="2"><button style="cursor: pointer;" class="my_info_content_care_table_submit" onclick="Add_Add()" name="">申请认证</button></td>
</tr>
</tbody>
</table>
<script src="${ctx}/assets/jquery/jquery-1.12.4.min.js" type="text/javascript"></script>
<!-- layer弹窗 -->
<script type="text/javascript" src="${ctx}/assets/plugins/layer/layer.js"></script>
<script type="text/javascript" src="${ctx}/assets/jquery/jquery.form.js"></script>
JS方法绑定:
//选择身份证正面照片
function show() {
var imgReaderI = new FileReader(); //FileReader()接口:用于读取文件
//图片文件 正则表达式过滤
regexImageFilter = /^(?:image\/bmp|image\/png|image\/jpeg|image\/jpg|image\/gif)$/i;
//回调函数onLoad异步
imgReaderI.onload = function (evt) {
$("#imgcheck").attr('src', evt.target.result);//将数据结果赋值给image的src
};
$("#FrontOfDocument").change(function () {
var imgfFile = $("#FrontOfDocument").prop('files')[0];//prop添加属性名称
//加载image标签中
if (!regexImageFilter.test(imgfFile.type)) {
layer.msg('选择的不是一个有效的图片文件', { icon: 0 });
}
//readAsDataURL()方法可以获取API异步读取的文件数据,另存为数据URL;将该URL绑定到img标签的src属性上,就可以实现图片的上传预览效果了。
imgReaderI.readAsDataURL(imgfFile);
});
};
//选择身份证反面照片
function ShowNegativeCertificate() {
var imgReaderI = new FileReader(); //FileReader()接口:用于读取文件
//图片文件 正则表达式过滤
regexImageFilter = /^(?:image\/bmp|image\/png|image\/jpeg|image\/jpg|image\/gif)$/i;
//回调函数onLoad异步
imgReaderI.onload = function (evt) {
$("#imgcheck2").attr('src', evt.target.result);//将数据结果赋值给image的src
};
$("#BackOfDocument").change(function () {
var imgfFile = $("#BackOfDocument").prop('files')[0];//prop添加属性名称
//加载image标签中
if (!regexImageFilter.test(imgfFile.type)) {
layer.msg('选择的不是一个有效的图片文件', { icon: 0 });
}
//readAsDataURL()方法可以获取API异步读取的文件数据,另存为数据URL;将该URL绑定到img标签的src属性上,就可以实现图片的上传预览效果了。
imgReaderI.readAsDataURL(imgfFile);
});
};
//图片保存
//证件认证新增保存
function Add_Add() {
layer.confirm('是否保存?', { btn: ['确定', '取消'] }, function (M) {
layer.close(M);
M = layer.load();
$("#form_UserType").ajaxSubmit(function(info){
info=info.str;
layer.msg(info);
if (info.indexOf('成功') > -1) {
layer.alert("保存成功");
var t1=window.setTimeout(Refresh, 2000);
}
layer.close(M);
});
});
}
效果截图:
这样你就可以实现基于SSM框架的多图片上传功能了。
- Hadoop(十四)MapReduce原理分析
- dubbox 增加google-gprc/protobuf支持
- 统计02:怎样描绘数据
- ActiveMQ笔记(1):编译、安装、示例代码
- centos ssh终端下高亮显示git分支名
- Django ORM模型:想说爱你不容易
- IE7下元素的 'padding-top' 遇到 'clear' 特性在某些情况下复制到 'padding-bottom'
- IE7下元素的 'padding-top' 遇到 'clear' 特性在某些情况下复制到 'padding-bottom'
- ARM处理器:开放者的逆袭
- 从5个方面对比微信小程序和App
- ActiveMQ笔记(7):如何清理无效的延时消息?
- JS魔法堂:再识Bitwise Operation & Bitwise Shift
- Hadoop(十三)分析MapReduce程序
- mac机上搭建php56/nginx 1.8.x/thinkphp 3.2.x/gearman扩展/seaslog扩展/redis扩展环境
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Saltstack_使用指南15_多master 3.1. 创建冗余的master3.2. 拷贝主master的key和配置到冗余的master3.3. 启动冗余ma
- Saltstack_使用指南16_syndic 3.1. 部署salt-master3.2. 其他配置与部署4.1. 部署salt-syndic4.2. syndic
- Centos7安装单机版MongoDB
- Saltstack_使用指南17_salt-ssh
- Saltstack_使用指南18_API
- Centos7安装单机版Redis
- Vue3 Composition-Api + TypeScript + 新型状态管理模式探索。
- Saltstack_实战指南01_系统规划
- Saltstack_实战指南02_各主机Pillar信息指定
- TypeScript基础看腻了?进阶实现智能类型推导的简化版Vuex,手把手带你实现。
- Linux下使用 github+hexo 搭建个人博客01-hexo搭建
- Linux下使用 github+hexo 搭建个人博客02-hexo部署到Github Pages
- Linux下使用 github+hexo 搭建个人博客03-hexo配置优化
- 接口测试框架实战(五) | 测试数据的数据驱动
- Linux下使用 github+hexo 搭建个人博客04-next主题优化