文件的上传对表单的要求
<!-- 上传文件:表单要求 1,enctype="multipart/form-data" 2.表单中需要有type="file"的input 3.表单的请求方式一定是POST。即method="post" servlet要求 1.不能使用request.getParameter 2.使用request.getInputStream --> <form action="/file_upload/RegistServlet" method="post" enctype="multipart/form-data"> 用户:<input name="username" type="text"><br> 注册:<input name="password" type="password"><br> 照片:<input name="pic" type="file" ><br> <input type="submit" value="提交"> </form>
//获得复杂类型表单的输入流 InputStream in = request.getInputStream(); //获得输入流的内容 String result = IOUtils.toString(in);
fileUpload的简单应用
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建接受文件的工厂类 DiskFileItemFactory factory = new DiskFileItemFactory(); //创建文件解析对象 ServletFileUpload sfu = new ServletFileUpload(factory); try { //解析request,获得表单中的每一文件(包含普通文本域)项 List<FileItem> list = sfu.parseRequest(request); //遍历每一个文本项 for(FileItem fi : list){ //获得原始文件名 String origFileName = fi.getName(); //获得文本域项的内容 String content = fi.getString(); //获得文本域的名字 String fieldName = fi.getFieldName(); //文本域的内容的类型 String ContentType = fi.getContentType(); //获得文件的大小(以字节为单位) long size = fi.getSize(); //是否是普通文本(普通文本就是非长传文件形式的文本)true代表普通字段,false是文件字段 boolean isFieldForm = fi.isFormField(); System.out.println("原始文件名:"+origFileName); System.out.println("文本项的内容:"+content); System.out.println("文本域的名字:"+fieldName); System.out.println("文本域的内容类型:"+ContentType); System.out.println("文件大小:"+size); System.out.println("是否是普通字段:"+isFieldForm); System.out.println("-----------------------------------"); } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
简单的文件写入硬盘
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*//设置request请求的编码方式。解决上传文件名中含有中文,出现中文乱码的问题.方法1 request.setCharacterEncoding("UTF-8");*/ response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); //创建接受文件的工厂类 DiskFileItemFactory factory = new DiskFileItemFactory(); //创建文件解析对象 ServletFileUpload sfu = new ServletFileUpload(factory); //解析request请求的编码方式。解决上传文件名中含有中文,出现中文乱码的问题.方法2 sfu.setHeaderEncoding("UTF-8"); try { //解析request,获得表单中的每一文件(包含普通文本域)项 List<FileItem> list = sfu.parseRequest(request); //遍历每一个文本项 for(FileItem fi : list){ //获得原始文件名 String origFileName = fi.getName(); //获得文本域的名字 String fieldName = fi.getFieldName(); //是否是普通文本(普通文本就是非长传文件形式的文本)true代表普通字段,false是文件字段 boolean isFieldForm = fi.isFormField(); if(!isFieldForm){ if(fieldName != null && !"".equals(fieldName)){ //首先指定要上传的目录(就是把jsp页面上传的file文件,保存到哪个目录下),隐私文件可以放在web-inf下,提高安全性 String upLoadPath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload"); //生成UUID文件名,使文件名不会重复 String uuid = UUID.randomUUID().toString(); //获得原始文件的后缀名 String suffix = origFileName.substring(origFileName.lastIndexOf(".")); //创建文件对象 File file = new File(upLoadPath,uuid+suffix); //把文件写入硬盘 fi.write(file); //回写结果 response.getWriter().print("文件上传成功"); } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }