java学习笔记 (7) —— 实现简单的上传处理

1、下载apache 的 commons-fileupload.jar 包及 commons-io.jar

2、引入到lib 文件夹下

3、新建uploadApache.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
  </head>
  
  <body>
  <!-- 20 min!!! -->
        <form action="/testStruts2/UploadServlet" method="post" enctype="multipart/form-data">
            username: <input type="text" name="username"/>
            password: <input type="password" name="password" />
            
            file1: <input type="file" name="file1" /><br>
            file2: <input type="file" name="file2" /><br>
            
            <input type="submit" value="submit">
        </form>
  </body>
</html>

4、新建resultApache.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
  </head>
  
  <body>
        username : ${requestScope.username}
        password: ${requestScope.password }
        file1:${requestScope.file1 }
        file2:${requestScope.file2 } 
  </body>
</html>

5、修改web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet> <servlet-name>UploadServlet</servlet-name> <servlet-class>com.test.servlet.UploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/UploadServlet</url-pattern> </servlet-mapping> </web-app>

5、新建UploadServlet.java

package com.test.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @SuppressWarnings("deprecation")
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //定义一个工厂类
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //获取当前站点目录下upload的路径
        String path = request.getRealPath("/upload");
        //设置文件暂存路径
        factory.setRepository(new File(path));
        //设置允许放在内存中的最大空间
        factory.setSizeThreshold(1024*1024);
        
        ServletFileUpload upload = new ServletFileUpload(factory);
        
        try{
            //uploadApache.jsp 有多个文本框,传入的是一组文件,因此通过LIST 处理
            List<FileItem> list = upload.parseRequest(request);
            //循环
            for (FileItem item : list) {
                //如果是一般的字段,直接放入request中
                if(item.isFormField()){
                    String name = item.getFieldName();
                    String value = item.getString("gbk");
                    request.setAttribute(name, value);
                //如果是文件类型的字段,则需要进行处理
                }else {
                    
                    String name = item.getFieldName();
                    //file 类型表单
                    String value = item.getName();
                    int start = value.lastIndexOf("\\");
                    //截取最后的文件名
                    String fileName = value.substring(start+1);
                    //在request中保存内容,用于前台获取
                    request.setAttribute(name, fileName);
                    //一句话也可以概括 
                    //item.write(new File(path,fileName));
                    //定义输出流,输出路径及文件名称
                    OutputStream os = new FileOutputStream(new File(path,fileName));
                    //定义输入流,并获取单个的输入流内容
                    InputStream is = item.getInputStream();
                    //定义字节流以获取输入流内容
                    byte[] buffer = new byte[400];
                    int length = 0;
                    while ((length = is.read(buffer)) > 0) {
                        os.write(buffer,0,length);
                    }
                    os.close();
                    is.close();
                }
            }
            request.getRequestDispatcher("upload/resultApache.jsp");
            
        }catch (Exception e) {
            e.printStackTrace();
        }    
    }

}

 

posted @ 2016-03-09 21:17  cklovefan  阅读(159)  评论(0编辑  收藏  举报