Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251585
  • 博文数量: 45
  • 博客积分: 170
  • 博客等级: 入伍新兵
  • 技术积分: 488
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-13 14:43
文章分类

全部博文(45)

文章存档

2014年(2)

2013年(35)

2012年(8)

我的朋友

分类: Java

2013-11-29 13:08:47

最近开发一个基于J2EE平台的DRP项目,其中需要上传下载大量的附件。项目中所使用的数据库为Oracle8I,操作系统和Web应用服务程序为:①开发环境Win2000/Tomcat、②开发测试环境Win2000/WebSphere6.0,③正式环境Unix/WebSphere6.0,④正式环境的备用服务器Linux/WebSphere6.0。在开发上传附件中出现了一个很普通很麻烦的问题,就是中文名称乱码问题,根据网上查询的资料,很快解决了①②③环境下的乱码,但④环境下依然是乱码。最后,经过持续一个多月的研究实验,终于找到一种同时满足①②③④种环境的解决办法。
    基本原理是:(1)、在上传之前,先对要上传的文件名进行编码;
                            (2)、对编码后的文件名解码后,再插入数据库中。
    基本实现如下面的代码片段,
    上传代码:
    ......
    
    
    
    ......


    JSP代码:
    ......
    //获取上传的文件名,并用自编的unescape函数解码
    table_name1 = CUtil.unescape(mySmartUpLoad.getRequest().getParameter("table_name1").toString());
    //分离目录信息,在数据库中只存储文件名
    table_name1 = CUtil.extractFileName(table_name1);
    ......
    
    unescpe函数代码:
    public static String unescape(String src) {
      StringBuffer tmp = new StringBuffer();
      tmp.ensureCapacity(src.length());
      int lastPos = 0, pos = 0, nLen = src.length();
      char ch;
      while (lastPos < nLen) {
         pos = src.indexOf("%", lastPos);
         if (pos == lastPos) {
          if (src.charAt(pos + 1) == 'u') {
           ch = (char) Integer.parseInt(src.substring(pos + 2, pos + 6), 16);
           tmp.append(ch);
           lastPos = pos + 6;
          } else {
           ch = (char) Integer.parseInt(src.substring(pos + 1, pos + 3), 16);
           tmp.append(ch);
          lastPos = pos + 3;
        }
      } else {
       if (pos == -1) {
         tmp.append(src.substring(lastPos));
         lastPos = nLen;
        } else {
         tmp.append(src.substring(lastPos, pos));
         lastPos = pos;
       }
     }
    }
  return tmp.toString();
 }

 下载处理代码:
   ......
   String FileName = rs.getString("NEWFILE_NAME"); //附件存储在服务器上的文件名
   String oFileName = rs.getString("OLDFILE_NAME"); //附件原来的文件名
   //以下代码的作用是,在浏览器中下载附件时,提示的中文名称不为乱码
   oFileName = new String(oFileName.getBytes("gb2312"),"iso8859-1");
   mySmartUpLoad.downloadFile(FileName,null,oFileName);


    来源:http://blog.csdn.net/operfume/article/details/2139058
阅读(2668) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~