五一节回了老家一趟,于是就有了借口不更新自己的日志了,前几天上来看到传说一梦给我留了2条留言说用SVNWebClient上传中文文件名的文件时,会出现乱码。说老实话,当初推荐SVNWebClient和sventon时,也只当它们是纯粹的基于Web的SVN浏览工具,所以也就没有去测试这个中文上传和中文注释的问题。还好当初虽然不怎样看好SVNWebClient,但也没有将其卸载,于是就试了一把。好险,差一点就没有测出来。传说一梦也不说说清楚,是当文件名中出现奇数个中文的时候会出现乱码,而偶数个时就OK,当然,我一开始试的就刚好是类似于"中文名.txt"子类的。于是杀到SVNWebClient的网站,在其论坛上看到已经有人提了问题了,只是没人问津,这不明摆着欺负中国人嘛!NND,只有发扬开源精神,自己动手了,尽管我是不会用SVNWebClient做SVN客户端工具的,放着那么好的TortoiseSVN不用,不是自己找难受嘛。
![]() import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.disk.DiskFileItemFactory; ![]() public class Uploader { public static Map doPost(HttpServletRequest request, HttpServletResponse responce, String destinationDirectory, String tempDirectory) { Map parameters = new HashMap(); File tempDir = new File(tempDirectory); if ( ! tempDir.exists()) { tempDir.mkdirs(); } File destDir = new File(destinationDirectory); if ( ! destDir.exists()) { destDir.mkdirs(); } ServletFileUpload fu = new ServletFileUpload( new DiskFileItemFactory( 4096 , new java.io.File(tempDirectory))); List fileItems = null ; try { fileItems = fu.parseRequest(request); } catch (FileUploadException e) { Logger.getInstance(Uploader. class ).error(e, e); } for (Iterator i = fileItems.iterator(); i.hasNext();) { FileItem fi = (FileItem) i.next(); if (fi.isFormField()) { try { parameters.put(fi.getFieldName(), fi.getString( " UTF8 " )); } catch (UnsupportedEncodingException e) { Logger.getInstance(Uploader. class ).error(e, e); } } else { // filename on the client String fileName = fi.getName(); // write the file try { File uploadFile = new File(destinationDirectory + " / " + FileUtil.getLastPathElement(fileName)); fi.write(uploadFile); // fi.delete(); } catch (Exception e) { Logger.getInstance(Uploader. class ).error(e, e); } parameters.put(FormParameters.FILE_NAME, FileUtil.getLastPathElement(fileName)); } } return parameters; } } 另外,不懂或者不愿意去学Java的人就不要用SVNWebClient和sventon了,世界上有那么多的各种各样语言编写的开源工具,干嘛不选一个自己熟悉的呢^_^。 |
|