表单提交与头像上传

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

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

一、文件上传实现方式

1.自己解析实现

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

requesthttp

2. io流
按照http协议格式读取文本数据,上传有头像图片,进行写文件操作.

2.smartupload上传库实现

  SmartUpload su = new SmartUpload();
  su.initialize(getServletConfig(), req, resp);// 初始化对象
  su.upload();// 上传文件
  su.save(file) //保存文件

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。

DiskFileItemFactory有俩个构造方法:

 DiskFileItemFactory() 其中sizeThreshold是默认值10kB, 文件大小不超过这个值将内容保存在内存,超过这个值会把文件保存到临时目录下,可用System.getProperty("java.io.tmpdir")获取;
 DiskFileItemFactory(int sizeThreshold, File repository)  可以指定sizeThreshold, 和文件保存到磁盘的路径。

2.创建一个文件处理类ServletFileUpload。

ServletFileUpload解析上传请求request的信息,封装到FileItem类中,我们通过FileItem可以获取文件的名称、大小、文件流等信息。

 ServletFileUpload sfu = new ServletFileUpload(factory);
   ServletFileUpload可以设置:
     headerEncoding 读取请求头信息时使用的编码
     sizeMax 单次请求所能上传的文件总大小的最大size,默认是-1,不限制大小
     fileSizeMax 单次请求所能上传的单个文件最大size,默认是-1,不限制大小
6List<FileItem> items = sfu.parseRequest(req);

二、学生头像上传实例

1.添加学生

addstudent.jsp

          <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>

addStudentservlet.do

  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);
	}
/**
	 * 上传修改后头像并保存表单数据到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);
			}
		}
	}
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);
             //添加数据库
}

2.修改学生操作:

	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");
	}
转载请注明来源:表单提交与头像上传

上一篇:

下一篇:

回复 取消