使用表单上传文件(二)
来源:互联网 发布:阿里云邮箱登录名忘记 编辑:程序博客网 时间:2024/06/06 10:55
先写一个简单的表单,根据上一篇文章说的步骤进行
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <form enctype="multipart/form-data" action="${pageContext.request.contextPath }/servlet/uploadServlet3" method="post"> <input type="text" name="info"></br> <input type="file" name="files"></br> <input type="file" name="photo"></br> <input type="submit" value="提交"> </form></body></html>
接着写处理表单提交内容的uploadServlet3.java类
package coml.qianfeng.web.servlet;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadBase;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.io.FilenameUtils;import com.qianfeng.util.UUIDUtil;public class UploadServlet3 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //判断表单提交数据类型 boolean ismultipartForm = ServletFileUpload.isMultipartContent(request); if(!ismultipartForm){ throw new RuntimeException("Your form's Content-Type is not multipart/form-data"); } //创建工厂类对象 DiskFileItemFactory factory = new DiskFileItemFactory(); //设置临时文件的存放位置 factory.setRepository(new File("e:\\filestemp")); //创建文件上传对象 ServletFileUpload fileUpload = new ServletFileUpload(factory); fileUpload.setHeaderEncoding("utf-8");//设置上传的中文乱码,而普通文本框中的中文乱码不能解决,可以在下面解决 //把表单提交过来的数据解析把每个数据封装成FileItem对象 try { fileUpload.setFileSizeMax(1024*1024*3);//设置上传文件的大小不能超过3M fileUpload.setSizeMax(1024*1024*5);//控制上传文件的总大小 //把表单提交过来的数据解析,把每个数据项封装成FileItem对象 List<FileItem > fileItems = fileUpload.parseRequest(request); //获取每项数据 for(FileItem item:fileItems){ //判断是否是普通的数据项 if(item.isFormField()){ processFormField(item); }else{ processFileUpload(item); } } }catch(FileUploadBase.SizeLimitExceededException e){ System.out.println("警告,上传文件的总大小不能超过5M"); } catch(FileUploadBase.FileSizeLimitExceededException e){ System.out.println("警告,文件不能超过3M"); } catch (Exception e) { e.printStackTrace(); } } //处理普通表单项的方法 private void processFormField(FileItem item){ //得到名字 String name = item.getFieldName(); //得到值 String value=""; try { value = item.getString("utf-8");//处理普通文本的中文乱码问题 } catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.println(name+"="+value); } //处理上传文件的方法 private void processFileUpload(FileItem item){ //得到上传的文件 String fileName = item.getName(); //在应用的目录下创建存储上传文件的目录 String storeDirectory = this.getServletContext().getRealPath("/WEB-INF/upload"); File realDirectory = new File(storeDirectory); if(!realDirectory.exists()){ realDirectory.mkdirs(); } try { //读取文件的读取流 //InputStream in = item.getInputStream(); //String fileName = item.getName();ie浏览器:F:\pic\deng.jpg 火狐:deng.jpg 为了兼容处理一下文件名 //截取文件名 //fileName = fileName.substring(fileName.lastIndexOf(File.separator)+1); fileName=FilenameUtils.getName(fileName);//使用工具类处理文件名 //处理文件同名问题 fileName = UUIDUtil.getUUID()+"_"+fileName; //如果是大网站没听有很大的访问量,上传很多图片 //还需要处理把文件放在不同的文件夹下 //String childDirectory = getChildDirectory(realDirectory); //如果每天的访问量都很大,同一天需要创建多个文件夹 String childDirectory = getChildDirectory2(realDirectory,fileName);// File fileDir = new File(realDirectory,childDirectory+File.separator+fileName);// FileOutputStream fos = new FileOutputStream(fileDir);// 实现把文件写入指定文件夹,同时有删除临时文件的功能,这一行可以代替下面注释的多行代码 item.write( new File(realDirectory,childDirectory+File.separator+fileName));// byte[] arr = new byte[1024];// int len=0;// while((len=in.read(arr))!=-1){// fos.write(arr,0,len);// }// //删除临时文件// item.delete();// in.close();// fos.close(); } catch (Exception e) { } } //创建子目录:用哈希值 private String getChildDirectory2(File realDirectory,String fileName) { int hashCode = fileName.hashCode(); String code = Integer.toHexString(hashCode);//把哈希值转成十六进制 String childDirectory = code.charAt(0)+File.separator+code.charAt(1);// a/b File dir = new File(realDirectory,childDirectory); if(!dir.exists()){ dir.mkdirs(); } return childDirectory; } //创建子目录:用时间 private String getChildDirectory(File realDirectory) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = new Date(); String time=sdf.format(date); File dir = new File(realDirectory,time); if(!dir.exists()){ dir.mkdirs(); } return time; } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
1 0
- 使用表单上传文件(二)
- 使用form表单上传文件(一)
- Struts2使用表单上传文件
- 使用Form表单上传文件
- Yii2使用表单上传文件
- Yii2使用表单上传文件
- iOS使用表单流上传文件(图片/文本/...)
- 使用提交表单及上传文件(适用于aspx)
- xUtils上传文件使用表单的方式上传文件。
- 使用python模拟post表单上传文件
- 使用ajax提交表单或上传文件
- 使用httpclient提交表单方式上传文件
- 文件上传(二)
- 文件上传(表单上传和ajax异步上传)
- (二)Web表单-文件上传机制详解(python-Django)
- 使用Struts1实现文件上传(二) 连接使用Struts1实现文件上传(1)
- nodejs使用multer中间件上传混合表单提交(文件和非文件普通文本域)
- (11)通过表单上传文件
- 极品五笔 造词
- C使用字符串
- uTorrent端口设置
- LINUX多路复用select,poll,epoll
- HRGN,剪裁区域
- 使用表单上传文件(二)
- Java中包、类、方法、属性、常量的命名规则
- WEB开发中常用的正则表达式
- X Window Programming From Scratch笔记(1
- 如何搭建调试IE6,7,8,9的兼容性的环境
- 【HDU5929 2016CCPC东北地区大学生程序设计竞赛 - 重现赛 H】【打表找规律 队列模拟】Basic Data Structure 双端栈下连续1和0做nand的结果
- LINUX,select
- X.509标准
- 一位资深HR的职场感言