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