主题:Uploadify上传插件中文乱码问题解决方法
在使用Uploadify插件进行文件上传时,当上传的文件名包含中文时,则在后台读取时,会出现乱码问题。之前一直以为是插件自带Flash上传器中的代码没有对中文编码问题进行处理,但经过反复试验发现,与Flash无关。
出现乱码是因为Flash发送数据是以UTF-8的格式进行编码,而后台接受时没有做出处理导致的。下面的代码是后台文件接收的Servlet代码,其中的
- upload.setHeaderEncoding("utf-8");
即表示使用utf-8的编码格式处理数据,这样一来,上传中文文件名则不会出现乱码问题
- ServletContext?servletContext?=?this.getServletConfig().getServletContext(); ??ApplicationContext?appContext?=?WebApplicationContextUtils ??????????.getWebApplicationContext(servletContext); ??String?uploadFolder?=?(String)?req.getParameter("folder"); ??String?savePath?=?this.getServletConfig().getServletContext().getRealPath(uploadFolder); ??savePath?=?savePath?+?"\\"; ????File?f1?=?new?File(savePath); ??if?(!f1.exists()){ ??????f1.mkdirs(); ??} ????DiskFileItemFactory?fac?=?new?DiskFileItemFactory(); ??ServletFileUpload?upload?=?new?ServletFileUpload(fac); ??upload.setHeaderEncoding("utf-8"); ??List?fileList?=?null; ??try{ ??????fileList?=?upload.parseRequest(req); ??}?catch?(FileUploadException?ex){ ??????return; ??} ??Iterator<FileItem>?it?=?fileList.iterator(); ??String?name?=?""; ??String?extName?=?""; ??while?(it.hasNext()){ ??????FileItem?item?=?it.next(); ??????if?(!item.isFormField()){ ??????????name?=?item.getName(); ??????????long?size?=?item.getSize(); ??????????String?type?=?item.getContentType(); ??????????if?(name?==?null?||?name.trim().equals("")){ ??????????????continue; ??????????} ??????????//扩展名格式:.flv ??????????if?(name.lastIndexOf(".")?>=?0){ ??????????????extName?=?name.substring(name.lastIndexOf(".")); ??????????} ??????????File?file?=?null; ??????????String?format?=?"yyyyMMddHHmmss"; ??????????Random?r?=?new?Random(); ??????????do{ ??????????????//生成随机文件名:日期+四位随机数 ??????????????int?rannum?=?(int)?(r.nextDouble()?*?(9999?-?1000?+?1))?+?1000; ??????????????name?=?DateUtil.parseString(new?Date(),?format); ??????????????name?=?name?+?rannum; ??????????????file?=?new?File(savePath?+?name?+?extName); ??????????}?while?(file.exists()); ????????????File?saveFile?=?new?File(savePath?+?name?+?extName); ??????????try{ ??????????????item.write(saveFile); ??????????}?catch?(Exception?e){ ??????????????e.printStackTrace(); ??????????} ??????} ??} ??resp.getWriter().print(name?+?extName);??
中午按钮已经解决了。。 2 楼 a498740995 2012-04-23 fileItem 里获取的文件类型是:application/octet-stream
怎么改啊?