表单提交与头像上传
Web后台管理系统中数据的添加、删除、修改操作是必不可少的,一般是针对数据库表记录的增删改,如果操作数据包含头像图片,就需要涉及文件上传操作。
一、文件上传实现方式
1.自己解析实现
用到知识:
1.http协议
当向服务器发送一次请求时,其实质为向服务器发送一个文本数据,这个文本数据是按http请求格式进行组装,格式如下图:
2. io流
按照http协议格式读取文本数据,上传有头像图片,进行写文件操作.
2.smartupload上传库实现
[java] SmartUpload su = new SmartUpload();
su.initialize(getServletConfig(), req, resp);// 初始化对象
su.upload();// 上传文件
su.save(file) //保存文件[/java]
3.commons-fileupload上传库实现
首先:下载commons-fileupload-1.3.2.jar和commons-io-2.4.jar
地址:http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
commons-fileupload核心类介绍:
1.创建一个文件项目工厂类DiskFileItemFactory。
[java]DiskFileItemFactory有俩个构造方法:
DiskFileItemFactory() 其中sizeThreshold是默认值10kB, 文件大小不超过这个值将内容保存在内存,超过这个值会把文件保存到临时目录下,可用System.getProperty("java.io.tmpdir")获取;
DiskFileItemFactory(int sizeThreshold, File repository) 可以指定sizeThreshold, 和文件保存到磁盘的路径。[/java]
2.创建一个文件处理类ServletFileUpload。
ServletFileUpload解析上传请求request的信息,封装到FileItem类中,我们通过FileItem可以获取文件的名称、大小、文件流等信息。
[java] ServletFileUpload sfu = new ServletFileUpload(factory);
ServletFileUpload可以设置:
headerEncoding 读取请求头信息时使用的编码
sizeMax 单次请求所能上传的文件总大小的最大size,默认是-1,不限制大小
fileSizeMax 单次请求所能上传的单个文件最大size,默认是-1,不限制大小
6List<FileItem> items = sfu.parseRequest(req);[/java]
二、学生头像上传实例
1.添加学生
addstudent.jsp
[java] <div class="login-form">
<form action="./addStudentservlet.do" method="post" enctype="multipart/form-data">
<input type="text" name="userName" placeholder="请输入学生姓名">
<input type="text" name="number" placeholder="请输入学生学号"><br><br>
头像 :<input type="file" name="headerImg"/>
<input type="submit" value="添加">
</form>
</div>[/java]
addStudentservlet.do
[java] protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 定义一个HashMap,存放请求参数
HashMap<String, String> parameterMap = new HashMap<String, String>();
// —–上传头像并保存参数到hashMap—–
uploadHeader(request, parameterMap);
addStudent(parameterMap,request,response);
}
[/java]
[java]
/**
* 上传修改后头像并保存表单数据到hashmap
*
* @param request
* @throws UnsupportedEncodingException
*/
public void uploadHeader(HttpServletRequest request, HashMap<String, String> parameterMap)
throws UnsupportedEncodingException {
ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
servletFileUpload.setHeaderEncoding("UTF-8");
List<FileItem> fileItemLists = null;
try {
fileItemLists = servletFileUpload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
Iterator<FileItem> iterator = fileItemLists.iterator();
while (iterator.hasNext()) {
FileItem fileItem = iterator.next();
// 如果是表单数
if (fileItem.isFormField()) {
String filedName = fileItem.getFieldName();
String fileValue = fileItem.getString("UTF-8");
parameterMap.put(filedName, fileValue);
} else {// 文件操作
String rootDir = getServletContext().getRealPath("/");
String fileDir = "upload/" + fileItem.getName();
File file = new File(rootDir + fileDir);
FileUtil.createFile(file);
System.out.println(file);
try {
fileItem.write(file);
} catch (Exception e) {
e.printStackTrace();
}
parameterMap.put(fileItem.getFieldName(), fileDir);
}
}
}[/java]
[java]private void addStudent(HashMap<String,String> parameters,HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String userName = parameters.get("userName");
String number = parameters.get("number");
int numbers = Integer.parseInt(number);
int ages = 23;
String fileUrl = parameters.get("header_img");
System.out.println("userName:"+userName+", number :"+number+" ,fileUrl :"+fileUrl);
//添加数据库
}[/java]
2.修改学生操作:
[java]
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HashMap<String, String> parameterMap = new HashMap<>();
// —–保存参数到hashMap并上传新头像—–
uploadHeader(request, parameterMap);
// —–删除原头像—–
deleteHeaderImg(parameterMap);
// —–修改数据库字段—-
updateStudent(parameterMap);
response.sendRedirect(request.getContextPath() + "/student_list.jsp");
}
[/java]
转载请注明来源:表单提交与头像上传




























