使用第三方组件实现上传文件

使用第三方组件实现上传文件功能需要在项目lib下目录导入两个Jar包(commons-fileupload 和  commons-io)

commons-io下载地址:http://commons.apache.org/proper/commons-io/download_io.cgi

commons-fileupload下载地址:http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi

关键步骤:

  1. 在JSP文件中使用page指令导入Commons-FileUpload组件所需的类
  2. 判断请求信息中的内容是否是multipart类型,如果是则进行处理
  3. 通过FileItemFactory工厂对象实例化ServletFileUpload对象
  4. 调用ServletFileUpload对象的parseRequest()将表单中字段解析成FileItem对象的集合
  5. 通过迭代依次处理每个FileItem对象,如果是普通字段,通过getString()方法得到相应表单字符的值,该值与表单字段中的"name"属性对应,如果是文件字段,则通过File的构造方法构建一个指定路径名和文件名的文件,并通过FileItem对象的Write()的方法将上传文件的内容保存到文件中

示例代码: 

 

 index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
   <form  action="doindex.jsp"  enctype="multipart/form-data" method="post">
   姓名:<input type="text" name="username">
   <input type="file" name="filename">
   <input type="submit" value="提交">
   </form>
  </body>
</html>

处理index.jsp请求的doindex.jsp页面

<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="org.apache.commons.fileupload.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<%
   request.setCharacterEncoding("utf-8");
   String uploadFileName="";//上传的文件名
   String fieldName="";//表单字段name的属性值
   
   //请求信息中的内容是否是multipart类型
   boolean isMultipart=ServletFileUpload.isMultipartContent(request);
   //上传文件的储存路径(服务器文件系统上的绝对文件路径)
   String uploadFilePath=request.getSession().getServletContext().getRealPath("upload/");
  
   if(isMultipart){
   
   FileItemFactory factory=new DiskFileItemFactory();
   ServletFileUpload upload=new ServletFileUpload(factory);
   
   try{
   List<FileItem> items=upload.parseRequest(request);
   Iterator<FileItem>  iter=items.iterator();
   while(iter.hasNext()){
   
   FileItem item=(FileItem)iter.next();
   if(item.isFormField()){  //普通表单字段
   fieldName=item.getFieldName();
   
   if(fieldName.equals("username")){
   out.print(item.getString("utf-8")+"上传了文件!");
   }
   
   }else{ //文件表单字段
   
   String fileName=item.getName();
   if(fileName!=null && !fileName.equals("")){
   File fullFile=new File(item.getName());
   
   File saveFile=new File(uploadFilePath,fullFile.getName());
   item.write(saveFile);
   uploadFileName=fullFile.getName();
   out.print("上传成功后的文件名是:"+uploadFileName);
   }
   
   }
   
   }
   
   }catch(Exception e){
   e.printStackTrace();
   }

   }
 %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'doindex.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->


  </head>
  
  <body>
    This is my JSP page. <br>
  </body>
</html>

猜你喜欢

转载自blog.csdn.net/Ein_Blatt/article/details/84197911