当前位置: 代码迷 >> Web前端 >> 主题:Uploadify下传插件中文乱码有关问题解决办法
  详细解决方案

主题:Uploadify下传插件中文乱码有关问题解决办法

热度:263   发布时间:2012-11-06 14:07:00.0
主题:Uploadify上传插件中文乱码问题解决方法

在使用Uploadify插件进行文件上传时,当上传的文件名包含中文时,则在后台读取时,会出现乱码问题。之前一直以为是插件自带Flash上传器中的代码没有对中文编码问题进行处理,但经过反复试验发现,与Flash无关。
出现乱码是因为Flash发送数据是以UTF-8的格式进行编码,而后台接受时没有做出处理导致的。下面的代码是后台文件接收的Servlet代码,其中的

Java代码 复制代码
  1. upload.setHeaderEncoding("utf-8");??
upload.setHeaderEncoding("utf-8");



即表示使用utf-8的编码格式处理数据,这样一来,上传中文文件名则不会出现乱码问题

Java代码 复制代码
  1. ServletContext?servletContext?=?this.getServletConfig().getServletContext(); ??
  2. ApplicationContext?appContext?=?WebApplicationContextUtils ??
  3. ????????.getWebApplicationContext(servletContext); ??
  4. String?uploadFolder?=?(String)?req.getParameter("folder"); ??
  5. String?savePath?=?this.getServletConfig().getServletContext().getRealPath(uploadFolder); ??
  6. savePath?=?savePath?+?"\\"; ??
  7. ??
  8. File?f1?=?new?File(savePath); ??
  9. if?(!f1.exists()){ ??
  10. ????f1.mkdirs(); ??
  11. } ??
  12. ??
  13. DiskFileItemFactory?fac?=?new?DiskFileItemFactory(); ??
  14. ServletFileUpload?upload?=?new?ServletFileUpload(fac); ??
  15. upload.setHeaderEncoding("utf-8"); ??
  16. List?fileList?=?null; ??
  17. try{ ??
  18. ????fileList?=?upload.parseRequest(req); ??
  19. }?catch?(FileUploadException?ex){ ??
  20. ????return; ??
  21. } ??
  22. Iterator<FileItem>?it?=?fileList.iterator(); ??
  23. String?name?=?""; ??
  24. String?extName?=?""; ??
  25. while?(it.hasNext()){ ??
  26. ????FileItem?item?=?it.next(); ??
  27. ????if?(!item.isFormField()){ ??
  28. ????????name?=?item.getName(); ??
  29. ????????long?size?=?item.getSize(); ??
  30. ????????String?type?=?item.getContentType(); ??
  31. ????????if?(name?==?null?||?name.trim().equals("")){ ??
  32. ????????????continue; ??
  33. ????????} ??
  34. ????????//扩展名格式:.flv ??
  35. ????????if?(name.lastIndexOf(".")?>=?0){ ??
  36. ????????????extName?=?name.substring(name.lastIndexOf(".")); ??
  37. ????????} ??
  38. ????????File?file?=?null; ??
  39. ????????String?format?=?"yyyyMMddHHmmss"; ??
  40. ????????Random?r?=?new?Random(); ??
  41. ????????do{ ??
  42. ????????????//生成随机文件名:日期+四位随机数 ??
  43. ????????????int?rannum?=?(int)?(r.nextDouble()?*?(9999?-?1000?+?1))?+?1000; ??
  44. ????????????name?=?DateUtil.parseString(new?Date(),?format); ??
  45. ????????????name?=?name?+?rannum; ??
  46. ????????????file?=?new?File(savePath?+?name?+?extName); ??
  47. ????????}?while?(file.exists()); ??
  48. ??
  49. ????????File?saveFile?=?new?File(savePath?+?name?+?extName); ??
  50. ????????try{ ??
  51. ????????????item.write(saveFile); ??
  52. ????????}?catch?(Exception?e){ ??
  53. ????????????e.printStackTrace(); ??
  54. ????????} ??
  55. ????} ??
  56. } ??
  57. resp.getWriter().print(name?+?extName);??
1 楼 a498740995 2012-04-23  
我单步跟了下,Flash发送数据是以iso-8859-1格式进行编码,怎么改能utf-8呢?
中午按钮已经解决了。。
2 楼 a498740995 2012-04-23  
fileItem 里获取的文件类型是:application/octet-stream
怎么改啊?
  相关解决方案