首先,建议将编码设置为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上传原理,解决中文乱码原因  

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

  1. ASP.NET jquery.uploadify上传控件中文乱码解决办法(转)

    原文地址:http://blog.csdn.net/ningxi_/article/details/6234725 在一般处理程序上加上这几句话: context.Response.ContentTy ...

  2. J2EE Oa项目上传服务器出现的乱码解决过程

    (= =)搞了许久觉得有必要记下来.. 由于我本地的mysql都设置好了,但是服务器的又不能去改它 毕竟还有其他人要用- -: 所以只能是我建的时候去设置一下了, 首先先建数据库 ,表;; creat ...

  3. Windows文本文件上传至linux显示乱码解决方法

    iconv -f gbk -t UTF-8 显示异常文本名 -o 另存为文件名 iconv -f gbk -t UTF-8 rkgxdt_new.log -o new

  4. servlet上传下载(任何格式的都可以)

    jar不能低于此版本,JDK1.6以上,否则户报错 <dependency> <groupId>commons-fileupload</groupId> <a ...

  5. WordPress上传含有中文文件出现乱码

    最近打算学习安装配置WordPress,当然同时也在学习PHP+MySQL,希望以后能做一些关于WordPress定制和二次开发,包括主题和插件.在成功安装WordPress3.5中文版之后,就测试了 ...

  6. 使用Servlet上传文件

    使用浏览器向服务器上传文件其本质是打开了一个长连接并通过TCP方式传输数据.而需要的动作是客户端在表单中使用file域,并指定该file域的name值,然后在form中设定enctype的值为mult ...

  7. Servlet上传文件

    Servlet上传文件 1.准备工作 (1)利用FileUpload组件上传文件,须要到apache上下载commons-fileupload-1.3.1.jar 下载地址:http://common ...

  8. 解决Cornerstone不能上传.a文件的问题 Cornerstone不上传*.xcuserstate,*.xcbkptlist文件

    在使用CornerStone的时候经常会出现.a文件无法上传的问题,导致从svn checkout到本地的时候编译报错 这里可以通过配置CornerStone来达到上传.a文件的效果 操作步骤: 打开 ...

  9. php大文件上传失败的原因及解决方法

    为什么上传大文件总是失败,上传小文件就没有问题.关于PHP大文件上传失败的原因及解决方法如下: 第1种情况:文件上传时存放文件的临时目录必须是开启的并且是 PHP 进程所有者用户可写的目录.如果未指定 ...

随机推荐

  1. 51nod 1013【快速幂+逆元】

    等比式子: Sn=(a1-an*q)/(1-q) n很大,搞一发快速幂,除法不适用于取膜,逆元一下(利用费马小定理) 假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p).刚好 ...

  2. Spring Cloud:使用Ribbon实现负载均衡详解(下)

    在上一篇文章(Spring Cloud:使用Ribbon实现负载均衡详解(上))中,我对 Ribbon 做了一个介绍,Ribbon 可以实现直接通过服务名称对服务进行访问.这一篇文章我详细分析一下如何 ...

  3. IT兄弟连 JavaWeb教程 El基本语法

    EL(Expression Language)表达式语言是在JSP 2.0版本中引入的新特性,它用于JSP文件中的数据访问.这种表达式语言能简化JSP文件中数据访问的代码,可用来替代传统的基于&quo ...

  4. JS异常捕获和抛出

    try...catch 用来异常捕获(主要适用于IE5以上内核的浏览器,也是最常用的异常捕获方式) 使用onerror时间捕获异常,这种捕获方式是比较古老的一中方式,目前一些主流的浏览器暂不支持这种 ...

  5. DRF教程4-视图集和路由类

    rest框架包括一个处理viewset的抽象,允许开发人员集中精力处理api交互和建模,url构造都根据常见方式自动处理. ViewSet类 几乎和VIew类一样,不过它提供read,update这样 ...

  6. p标签中的文本换行

    参考文章 word-break:break-all和word-wrap:break-word的区别 CSS自动换行.强制不换行.强制断行.超出显示省略号 属性介绍 white-space: 如何处理元 ...

  7. 转 PHP函数---$_Get()和$_Post()的用法

    一.$_Get()和$_Post()函数是用来传值的,即对应两种提交表单的方法,get和post. 二.$_Get方法 (1)获取通过URL的传值 Example 1 新建两个PHP文件,1.php, ...

  8. L. Right Build bfs

    http://codeforces.com/gym/101149/problem/L 给出一个有向图,从0开始,<u, v>表示要学会v,必须掌握u,现在要学会a和b,最小需要经过多少个点 ...

  9. Linux--NiaoGe-Service-05

    1.设置网络参数的命令 命令名称 作用 ifconfig 查询.设置网卡与IP网络等相关参数 ifup.ifdown 启动.关闭网络接口 route 查看配置路由表(route table) ip 整 ...

  10. 我的NopCommerce之旅(3): 系统代码结构分析

    一.概述 基于MVC 二.详细描述 \Libraries\Nop.Core 核心类,包括缓存.事件.帮助类.业务对象(订单.客户实体) \Libraries\Nop.Data 数据访问层,采用Enti ...