表单提交与头像上传

    |     2016年12月20日   |   Servlet与Jsp   |     0 条评论   |    4285

Web后台管理系统中数据的添加、删除、修改操作是必不可少的,一般是针对数据库表记录的增删改,如果操作数据包含头像图片,就需要涉及文件上传操作。

一、文件上传实现方式

1.自己解析实现

用到知识:
1.http协议
当向服务器发送一次请求时,其实质为向服务器发送一个文本数据,这个文本数据是按http请求格式进行组装,格式如下图:

requesthttp

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]

转载请注明来源:表单提交与头像上传
本文链接地址:https://ai.zhousir.top/?p=1819

上一篇:

下一篇:

回复 取消