五一節(jié)回了老家一趟,于是就有了借口不更新自己的日志了,前幾天上來看到傳說一夢給我留了2條留言說用SVNWebClient上傳中文文件名的文件時,會出現(xiàn)亂碼。說老實話,當初推薦SVNWebClient和sventon時,也只當它們是純粹的基于Web的SVN瀏覽工具,所以也就沒有去測試這個中文上傳和中文注釋的問題。還好當初雖然不怎樣看好SVNWebClient,但也沒有將其卸載,于是就試了一把。好險,差一點就沒有測出來。傳說一夢也不說說清楚,是當文件名中出現(xiàn)奇數(shù)個中文的時候會出現(xiàn)亂碼,而偶數(shù)個時就OK,當然,我一開始試的就剛好是類似于"中文名.txt"子類的。于是殺到SVNWebClient的網(wǎng)站,在其論壇上看到已經(jīng)有人提了問題了,只是沒人問津,這不明擺著欺負中國人嘛!NND,只有發(fā)揚開源精神,自己動手了,盡管我是不會用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了,世界上有那么多的各種各樣語言編寫的開源工具,干嘛不選一個自己熟悉的呢^_^。 |
|