Java中,当表单含有文件上传时,提交数据的如何读取(吐血版)

这篇博客详细介绍了在Java中如何处理包含文件上传的表单数据。首先,通过ServletFileUpload解析请求,获取上传文件的信息,如文件名、类型和大小。接着,检查文件类型是否符合要求(只允许特定的图片格式)。然后,将文件保存到服务器,并更新数据库中的照片链接。同时,博客还展示了如何获取并处理普通表单字段的数据。最后,将所有数据整合并添加到数据库中。
int TeamId = 0;
// 用于存放输出的信息
String message = "";
// 在自己的项目中构造出一个用于存放用户照片的文件夹
String projectpath = this.getServletContext().getRealPath(
"/headPhoto/");
// 如果此文件夹不存在,则构造此文件夹
File f = new File(projectpath);
if (!f.exists()) {
f.mkdir();
}


// 构造出文件工厂,用于存放JSP页面中传递过来的文件
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置缓存大小,如果文件大于缓存大小时,则先把文件放到缓存中
factory.setSizeThreshold(4 * 1024);
// 设置上传文件的保存路径
factory.setRepository(f);


// 产生Servlet上传对象
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置可以上传文件大小的上界4MB
upload.setSizeMax(4 * 1024 * 1024);


try {
// 取得所有上传文件的信息
List<FileItem> list = upload.parseRequest(request);
Iterator<FileItem> iter = list.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
// 如果接收到的参数不是一个普通表单(例text等)的元素,那么执行下面代码
if (!item.isFormField()) {
String fieldName = item.getFieldName();// 获得此表单元素的name属性
String fileName = item.getName();// 获得文件的完整路径
// System.out.println("1.1:"+fileName);
String contentType = item.getContentType();// 获得文件类型
long fileSize = item.getSize();// 获得文件大小
// 从文件的完整路径中截取出文件名
fileName = fileName.substring(
fileName.lastIndexOf("\\") + 1,
fileName.length());


// 判断是否有图片上传
if (!("".equals(fileName)) && !(fileName == null)) {


// 如果上传的文件不是图片,那么不上传
String allImgExt = ".jpg|.jpeg|.gif|.bmp|.png|";
String extName = fileName.substring(
fileName.indexOf("."), fileName.length());
if (allImgExt.indexOf(extName + "|") == -1) {
message = "该文件类型不允许上传。请上传 " + allImgExt
+ " 类型的文件,当前文件类型为" + extName;
break;
}


String filepath = projectpath + "\\" + fieldName;
File uf = new File(filepath);
// 更改文件的保存路径,以防止文件重名的现象出现
if (!uf.exists()) {
uf.mkdir();
}
// 此输出路径为保存到数据库中photo字段的路径
insertDB = "headPhoto/" + fieldName + "/"
+ fileName;
// System.out.println("文件路径:"+insertDB+":"+insertDB.length());


File uploadedFile = new File(filepath, fileName);


try {
// 如果在该文件夹中已经有相同的文件,那么将其删除之后再重新创建(只适用于上传一张照片的情况)
if (uploadedFile.exists()) {
uploadedFile.delete();
}
item.write(uploadedFile);
/**********/


TeamMembersService teamMembersService = new TeamMembersServiceImpl();
if (teamMembersService.updatePhoto(insertDB) != 0) {
message = "上传文件成功<br/><br/>基本信息如下:<br/>文件名:"
+ fileName
+ "<br/>文件类型:"
+ contentType
+ "<br/>文件大小:"
+ fileSize;
}


} catch (Exception e) {
e.printStackTrace();
// return ;
}


} else {
// 取得普通的对象(对于像文本框这种类型的使用)
// 对于普通类型的对象暂不做处理
// return ;
}
} else {


String name = item.getFieldName();
String value = item.getString();
value = new String(value.getBytes("ISO-8859-1"),
"UTF-8");
switch (name) {
case "UserName":
UserName = value;
break;
case "Birthday":
Birthday = value;
break;
case "IDCardNum":
IDCardNum = value;
break;
case "Phone":
Phone = value;
break;
case "Level":
Level = value;
break;
case "Rusume":
Rusume = value;
break;
case "Role":
Role = value;
break;
case "Notes":
Notes = value;
break;
case "Summary":
Summary = value;
break;
case "TeamId":
TeamId = Integer.parseInt(value.toString());
break;
default:
break;
}
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
message = "文件的内容过大,请上传小于4MB的文件";
e.printStackTrace();
}
int res = 0;
Members members = new Members();
members.setUserName(UserName);
members.setBirthday(Birthday);
members.setIDCardNum(IDCardNum);
members.setPhone(Phone);
members.setLevel(Level);
members.setRusume(Rusume);
members.setSummary(Summary);
members.setRole(Role);
members.setNotes(Notes);
members.setTeamId(TeamId);
members.setPhoto(insertDB);
TeamMembersService teamMembersService;
try {
teamMembersService = new TeamMembersServiceImpl();
res = teamMembersService.addMembers(members);
if (res != 0) {
// request.setAttribute("info", "添加成功");
// ../../GoManagerPlat/RelayTeamMemberServlet?showPage=1&keyword=<%=a
// %>
response.sendRedirect("/GoManagerPlat/RelayTeamMemberServlet?showPage=1&keyword=");
// out.println("<script>alert('修改成功!');window.history.go(-2)</script>");
// request.getRequestDispatcher(request.getHeader("referer")).forward(request,response);
// request.getRequestDispatcher("/Ok").forward(request,
// response);
} else {
request.setAttribute("info", "添加失败");
request.getRequestDispatcher("/Error").forward(request,
response);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值