servlet上传多个文件(乱码解决)

首先,建议将编码设置为GB2312,并在WEB-INF\lib里导入:commons-fileupload-1.3.jar和commons-io-2.4.jar,

可百度下下载,然后你编码完成后,上传时可能会遇到"servlet Bad version number in .class file"错误。

解决:

1.Window --> Preferences -->Java --> compiler中的compiler compliance level对应的下拉菜单中选择JDK版本.

2.Window --> Preferences -->MyEclipse --> Servers-->Tomcat --> Tomcat n.x -->JDK中的Tomcat JDKname下的下拉菜单中选择自己电脑上安装的JDK版本(必须与步骤1中的JDK版本一致).

如果还是没有解决,不用着急,因为有些MyEclipse版本自带有JDK版本,所以也要将它改过来.

3.Window --> Preferences -->Java -->Installed JRES,然后在右边选择与步骤1和2版本一致的JDK版本,如果没有,可以自己添加.然后选中就可以了.

4、.Window --> Preferences -->MyEclipse --> Servers-Resin 3-Resin 3.x-JDK-Resin jdk name:选择jdk1.6.0_03

1.前台jsp:

enctype="multipart/form-data"

  <body style="margin:50px">
  <form action="servlet/UploadServlet" method="post" enctype="multipart/form-data">
     <p>上传文件:</p>
     文件1:<input type="file" name="file1" /><br/>
     描述:<input type="text" name="description1" /><br/>
     文件2:<input type="file" name="file2" /><br/>
    描述:<input type="text" name="description2" /><br/>
  <input type="submit" value=" 上  传 " />
  </form>
  </body>

2.后台action:

public class UploadServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         response.setCharacterEncoding("GB2312");
         response.getWriter().println("<script>alert(‘请用POST方式上传文件!‘)</script>");
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        File file=null;
        String description=null;  

        String uploadPath=this.getServletContext().getRealPath("upload");
        String uploadTemp=this.getServletContext().getRealPath("upload/temp");
        //设置响应格式(不设置请求格式,因为文件是二进制的,不能使用UTF-8格式化)
        response.setContentType("text/html;charset=gb2312");  

        PrintWriter out=response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("<HEAD><TITLE>文件上传</TITLE></HEAD>");
        out.println("<BODY style=‘margin:50px‘>");
        out.println("上传日志:<BR/>");
        //创建基于磁盘的工厂,针对大文件,临时文件将存储在磁盘
        DiskFileItemFactory factory=new DiskFileItemFactory();
        //设置缓冲区大小,超出该文件直接写入到磁盘的大小设置门槛。
        factory.setSizeThreshold(10240);  //这里默认10KB
        //设置用于大于配置的大小阈值设置的临时存储文件目录。
        factory.setRepository(new File(uploadTemp));
        //创建一个文件上传的句柄
        ServletFileUpload upload=new ServletFileUpload(factory);
        //设置最大文件尺寸 ,这里是4MB
        upload.setSizeMax(4194304);
        upload.setHeaderEncoding("GB2312");  

        try {
            //将解析结果放在LIST中
            List<FileItem> list =upload.parseRequest(request);
            out.println("遍历所有的 FileItem ... <br/>");
            // 遍历 list 中所有的 FileItem
            for(FileItem item:list)
            {
                // 如果是 文本域
                if(item.isFormField())
                {
                    if(item.getFieldName().equals("description1")||item.getFieldName().equals("description2"))
                    {  

                        description = item.getString("GB2312");
                        out.println("遍历到 "+item.getFieldName()+" ... <br/>"+description+"<BR/>");
                    }
                }
                else
                {
                    //否则为文件域,当getName为Null说明没有选则文件
                    if((item.getFieldName().equals("file1")||item.getFieldName().equals("file2"))
                            &&item.getName()!=null&&!item.getName().equals(""))
                    {
                        try
                        {  

                            File remoteFile=new File(item.getName());
                            out.println("遍历到 file ... <br/>");
                            out.println("客户端文件位置: " + remoteFile.getAbsolutePath() + "<br/>");
                            // 服务器端文件,放在 upload 文件夹下
                            file=new File(uploadPath,remoteFile.getName());
                            if(!file.getParentFile().exists())
                                file.getParentFile().mkdirs();
                            if(!file.exists())
                                file.createNewFile();  

                            item.write(file);  

                        } catch (Exception e) {  

                        }
                        finally //总是立即删除保存表单字段内容的临时文件
                        {
                            item.delete();
                        }
                    }
                }
            }
            out.println("Request 解析完毕,文件上传完毕!");
        } catch (Exception e) {
            out.println("Request 解析异常!"+e.getMessage());
        }
        out.flush();
        out.close();
    }    }

web.xml

新建servlet的时候,会自动配置文件  

剖析Commons-fileupload.jar上传原理,解决中文乱码原因  

时间: 2024-11-06 07:07:52

servlet上传多个文件(乱码解决)的相关文章

动态上传多个文件和解决文件的重名的问题(61)

动态上传多个文件 <form name="xx" action="<c:url value='/Up3Servlet'/>" method="post" enctype="multipart/form-data"> <table id="tb" border="1"> <tr> <td> File: </td> &l

java实现动态上传多个文件并解决文件重名问题(转)

本文分为两大方面进行讲解: 一.java实现动态上传多个文件 二.解决文件重命名问题java 供大家参考,具体内容如下 1.动态上传多个文件 <script> <form name="xx" action="<c:url value='/Up3Servlet'/>" method="post" enctype="multipart/form-data">   <table id=&qu

使用Servlet上传文件

使用浏览器向服务器上传文件其本质是打开了一个长连接并通过TCP方式传输数据.而需要的动作是客户端在表单中使用file域,并指定该file域的name值,然后在form中设定enctype的值为multipart/form-data和method值为post.其他就如同一般表单一样.示例如下: <form name="form" action="uploadbyservlet1" enctype="multipart/form-data" m

Servlet上传文件

1.准备工作 (1)利用FileUpload组件上传文件,需要到apache上下载commons-fileupload-1.3.1.jar 下载地址:http://commons.apache.org/fileupload/ (2)由于文件上传还得有IO流传输,需要到apache上下载commons-io-2.4.jar 下载地址:http://commons.apache.org/io/ 2.正式开发 (1)新建文件上传界面 file.jsp: <%@ page language="ja

servlet上传文件(四)

1.servlet上传文件 servlet上传文件就是将客户端的文件上传到服务器端. 向服务器发送数据时,客户端发送的http请求正文采用"multipart/form-data"数据类型,他表示复杂的多个子部分的复合表单. 为了简化"multipart/form-data"数据的处理过程.可以使用Apache组织提供是的两个开源包来来实现上传. fileupload软件包(commons-fileupload-1.2.1.jar),负责文件上传的软件包. io软件

解决ASP.NET中的FileUpload 不能上传大于4M文件的限制

ASP.NET的缺省设定只允许上传4M的文件,这是出于对网站安全性的考虑,为了防止网站受到Denial of Service attacks的攻击. 虽说是出于对网站安全性的考虑,但是程序却捕捉不到文件超过4M的异常.调试程序时即使设置了文件超过4M就退出,也只能看着网页超时,无能为力.调了好一阵,上网一搜,这个居然是微软设的陷阱!! 解决方案: 在web.config中的<system.web></system.web>内加入如下代码: <httpRuntime execu

struts2文件上传(单文件/批量添加)

单文件上传 1.导入上传需要jar包 2.建立UploadAction file是jsp页面的输入项的name相同,后面的两个属性的名称也是有规律的:(inputName+FileName/ContentType) 1 public class UploadAction extends ActionSupport{ 2 3 private static final long serialVersionUID = 1L; 4 private File file;//上传文件的本身 5 privat

***使用PHP实现文件上传和多文件上传

http://www.365mini.com/page/php-upload-file.htm 在PHP程序开发中,文件上传是一个使用非常普遍的功能,也是PHP程序员的必备技能之一.值得高兴的是,在PHP中实现文件上传功能要比在Java.C#等语言中简单得多.下面我们结合具体的代码实例来详细介绍如何通过PHP实现文件上传和多文件上传功能. 要使用PHP实现文件上传功能,我们先来编写两个php文件:index.php和upload.php.其中,index.php页面用于提交文件上传的表单请求,u

SpringMVC实现单文件上传、多文件上传、文件列表显示、文件下载

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+standard.jar 整个相关的包如下: 整个工程目录如下: 二.配置web.xml和SpringMVC文件