JAVA文件上传
2015-12-02 15:30
561 查看
今天复习下文件上传功能
所需组件:
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
上传页面 sc.jsp
上传servlet
所需组件:
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
上传页面 sc.jsp
<span style="font-size:18px;"><%@ 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>文件上传</title> </head> <body> <form action="${ pageContext.request.contextPath }/upload" method="post" enctype="multipart/form-data"> 文件描述:<input type="text" name="desc"/><br/> 文件上传:<input type="file" name="upload"><br/> <input type="submit" value="上传"> </form> </body> </html></span>
上传servlet
<span style="font-size:18px;">package com.anditech.fileupload; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; 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.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; @WebServlet("/upload") public class Upload extends HttpServlet { private static final long serialVersionUID = 1L; public Upload() { super(); } /** * 1.创建一个磁盘文件项工厂. * 2.创建一个核心解析类ServletFileUpload. * 3.解析request对象.返回一个List<FileItem> */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.创建一个磁盘文件项工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(3*1024*1024);// 设置缓冲区是3M。 String tempPath = getServletContext().getRealPath("/temp"); File file = new File(tempPath); factory.setRepository(file); //获取分隔符 Properties props = System.getProperties(); String separator = props.getProperty("file.separator"); //获取文件上传路径 String basePath=this.getServletConfig().getServletContext().getRealPath("/"); String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); String uploadPath = "uploadfile" +separator+"" + dateStr + ""+separator; String fullPath = basePath+uploadPath; System.out.println("filePath : "+fullPath); // 2.创建一个核心解析类. ServletFileUpload fileUpload = new ServletFileUpload(factory); // 解决中文文件名乱码问题: fileUpload.setHeaderEncoding("UTF-8"); // 3.解析request对象 try { List<FileItem> list = fileUpload.parseRequest(request); System.out.println(); // 遍历 for (FileItem fileItem : list) { if(fileItem.isFormField()){ // 页面中的普通项 // 获得的是普通项的名称 String name = fileItem.getFieldName(); // 获得普通项的值 String value = fileItem.getString("UTF-8"); System.out.println(name+" "+value); }else{ // 文件上传项 // 获得文件的名称 String fileName = fileItem.getName(); int idx = fileName.lastIndexOf("\\"); if(idx != -1){ // 说明老版本浏览器. fileName = fileName.substring(idx+1); } System.out.println(fileName); // 获得文件的数据 InputStream is = fileItem.getInputStream(); // 向服务器端写文件. // 获得上传文件的路径.---获得文件上传的磁盘绝对路径 File f=new File(fullPath); f.mkdirs(); File file2 = new File(fullPath, fileName); if(!file.exists()){ file.mkdirs();//如果file不存在自动创建 } OutputStream os = new FileOutputStream(file2); // 两个流对接: int len = 0; byte[] b = new byte[1024]; while((len = is.read(b))!=-1){ os.write(b, 0, len); } is.close(); os.close(); } // 删除临时文件. fileItem.delete(); } } catch (FileUploadException e) { e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }</span>
相关文章推荐
- 从头认识java-11.4 正则表达式(3)-Pattern和Matcher
- 在MyEclipse中如何将Java Project转换成Java Web Project
- java设计模式--创建型模式之原型模式
- 调用 java GC
- 使用Eclipse Memory Analyzer进行内存泄漏分析三部曲
- 製作java的jar包
- 关于在Eclipse中发布Web项目
- 字符与数字转换
- Eclipse快捷键
- Eclipse安装后,做哪些设置
- SpringMVC整合TaskExecutor线程池的配置/使用
- JavaWeb之Servlet
- 判断字符串是否为数字
- JavaSE(20)(多线程安全)
- JavaEE_Mybatis_SpringMVC_Spring_lesson4_配置视图解析器的前缀与后缀
- java中List的用法和实例详解
- java多线程编程之Synchronized块同步方法
- kafka消息无法正常消费,且报异常:java.lang.IllegalArgumentException: Path must not end with / character
- java 自定义鼠标图标
- Java多线程编程模式实战指南(三):Two-phase Termination模式