文件跟普通表单同时提交

文件和普通表单同时提交
JSP页面:send.jsp,页面编码为GBK
   <body>
       <%!
           Date now=new Date();
           String form=String.format("%tF",now);
        %>
        <form action="Uploadfile" method="post" enctype="multipart/form-data">
            <p>上传的文件是:(文件大小不要超过2MB)<br>
            <input type="file" name="file" size="80"/><br/>
            <p>文件描述
            <input type="text" name="upDe" size="80"/><br>
            <p>上传时间
            <input type="text" name="uptime" size="80"/><br/>
            <input type="submit" value="提交"/>
        </form>
  </body>

servlet方法,Uploadfile.java

     package com.servlet;


import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class Uploadfile extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        String uploadPath=this.getServletContext().getRealPath("/file");
        String message=null,content=null,dtme=null;
        try{
            if(ServletFileUpload.isMultipartContent(request)){  //判断获取的是不是文件
                DiskFileItemFactory disk=new DiskFileItemFactory();
                disk.setSizeThreshold(20*1024);      //设置内存可存字节数
                disk.setRepository(disk.getRepository());  //设置临时文件目录
                ServletFileUpload up=new ServletFileUpload(disk);
                int maxsize=2*1024*1024;
                List list=up.parseRequest(request);   //获取上传列表
                Iterator i=list.iterator();    //创建列表的迭代器
                while(i.hasNext()){
                    FileItem fm=(FileItem)i.next();//遍历列表
                    if(!fm.isFormField()){
                        String filePath=fm.getName();  //获取文件全路径名
                        String fileName="";
                        int startIndex=filePath.lastIndexOf("\\");
                        if(startIndex!=-1){        //对文件名进行截取
                            fileName=filePath.substring(startIndex+1);
                        }else{
                            fileName=filePath;
                        }
                        if(fm.getSize()>maxsize){
                            message="文件太大了,不要超过2MB";
                            break;
                        }
                        String fileSize=new Long(fm.getSize()).toString();
                        if((fileName==null)||fileName.equals("")&&(fileSize.equals("0"))){
                            message="文件名不能为空,文件大小也不能为零!";
                            break;
                        }
                        File saveFile=new File(uploadPath,fileName);
                        fm.write(saveFile);//向文件中写入数据
                        message="文件上传成功!";
                        
                    }else{
                        String foename=fm.getFieldName();//获取表单元素名
                        String con=fm.getString("GBK");
                        //表单元素
                        if(foename.equals("upDe")){
                            content=con;
                        }else if(foename.equals("uptime")){
                            dtme=con;
                        }
                    }
                }
                
            }
        }catch(Exception ex){
            ex.printStackTrace();
            
        }
        request.setAttribute("result", message);
        request.setAttribute("upDe", content);
        request.setAttribute("dtme", dtme);
        request.getRequestDispatcher("message.jsp").forward(request, response);
    }
}

message.jsp
   <body>
    <table border=1>
        <tr>
            <td>上传情况:</td>
            <td><%=request.getAttribute("result") %></td>
        </tr>
        <tr>
            <td>上传情况:</td>
            <td><%=request.getAttribute("upDe") %></td>
        </tr>
        <tr>
            <td>上传时间:</td>
            <td><%=request.getAttribute("dtme") %></td>
        </tr>
    </table>

我上传文件是通过commons-fileUpload组件,当然用到的组件是commons-fileupload-1.2.2.jar和commons-io-2.1.jar这个两个包,然后通过上面的方法就可以解决普通表单和文件表单同时提交的问题了,对于FileItem对象的getString()方法有两种重载方式:第一种是无参的,编码方式系统默认的;第二种是有参的,参数就是定义的编码方式,如UTF-8,GBK等。为了避免获取请求数据时出现中文乱码,可以应用设置编码格式的getString()方法。