html:
<HTML>
  <HEAD>
     
  <meta http-equiv="Content-Type" content="text/html; charset=GBK">     <TITLE>File Upload Page</TITLE>
  </HEAD>
  <BODY>Upload Files
    <FORM name="filesForm" action="ProcessFileUpload.jsp" method="post" enctype="multipart/form-data">
        File 1:<input type="file" name="file1"/><br/>
       
        <input type="submit" name="Submit" value="Upload Files"/>
    </FORM>
  </BODY>
</HTML>jsp:<%@ page contentType="text/html; charset=gb2312" language="java"  
import="org.apache.commons.fileupload.*, 
org.apache.commons.fileupload.FileItem,
java.util.List,
java.util.Iterator,
java.io.*"    
%> 
<%@ page import="org.apache.commons.io.*" %>
<html>
<head><title>Process File Upload</title>
</head>
<%
 
        System.out.println("Content Type ="+request.getContentType());
try{
     DiskFileUpload fu = new DiskFileUpload();
 // 设置允许用户上传文件大小,单位:字节
 fu.setSizeMax(-1);
 // 设置最多只允许在内存中存储的数据,单位:字节
 
 System.out.println("encoding:"+request.getCharacterEncoding());
 
 fu.setHeaderEncoding(request.getCharacterEncoding());
 fu.setSizeThreshold(4096);
 // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
 fu.setRepositoryPath("e:\\temp");
 //开始读取上传信息
 List fileItems = fu.parseRequest(request);
 // 依次处理每个上传的文件
 Iterator iter = fileItems.iterator();
 while (iter.hasNext()) {
  FileItem item = (FileItem) iter.next();
  //忽略其他不是文件域的所有表单信息
  if (!item.isFormField()) {
   String name = item.getName();
   
   System.out.println(name);
   name=FilenameUtils.getName(name);
   System.out.println(new String(name.getBytes("gb2312"), "iso8859_1"));
   System.out.println("name2/:"+name);
   String storePath="e:\\UploadTest";
   File store= new File(storePath);
               if(!store.exists()){
             if(store.mkdirs())
             System.out.println("文件目录成功!");
             }
   String name1=storePath+File.separator+ name;
   System.out.println(name1);
   File test=new File(name1);
   item.write(test);
   
 }
 
  }
 } catch(Exception e){
  e.printStackTrace();
 }
  
%>
<body>
成功!!
</body>
</html>上传后中文文件名变成: &#28023;&#20891;&#36890;&#20449;&#20891;&#20195;&#34920;&#20449;&#24687;&#31995;&#32479;&#29992;&#25143;&#38656;&#27714;&#35828;&#26126;&#20070;怎么解决阿?如何转码? 我request得到编码就是gb2312呀
 fu.setHeaderEncoding(request.getCharacterEncoding());已经设置为gb2312了

解决方案 »

  1.   

    做个hidden的域,把文件名保存下来,然后一起提交过去,单独取到这个文件名的值即可。
      

  2.   

    <input type="file" name="itemFile" class="input_style" onChange="document.all.itemFileName.value=getFileName(this.value)" size="50"/><input type="hidden" name="itemFileName">JS: function getFileName(filePath)
    {
    var theFile = filePath;//.toLowerCase();
    var fileName = ""; if(theFile.length == 0)
    {
    showInfo("请选择所要上传的文件!");
    }
    else
    {
    if(theFile.indexOf(".") > 0)// && theFile.length == theFile.indexOf(".") + 4
    {
    fileName = theFile.substring(theFile.lastIndexOf("\\") + 1,theFile.length);
    }
    else
    {
    showInfo("你所指定的文件不是正确文件,请选择正确的文件,扩展名应当为XXX\t");
    }
    }
    //showDebugInfo("fileName:" + fileName);
    return fileName;
    }