<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Evan's Blog

    Java, software development and others.

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      28 隨筆 :: 0 文章 :: 73 評(píng)論 :: 0 Trackbacks

    五一節(jié)回了老家一趟,于是就有了借口不更新自己的日志了,前幾天上來看到傳說一夢給我留了2條留言說用SVNWebClient上傳中文文件名的文件時(shí),會(huì)出現(xiàn)亂碼。說老實(shí)話,當(dāng)初推薦SVNWebClient和sventon時(shí),也只當(dāng)它們是純粹的基于Web的SVN瀏覽工具,所以也就沒有去測試這個(gè)中文上傳和中文注釋的問題。還好當(dāng)初雖然不怎樣看好SVNWebClient,但也沒有將其卸載,于是就試了一把。好險(xiǎn),差一點(diǎn)就沒有測出來。傳說一夢也不說說清楚,是當(dāng)文件名中出現(xiàn)奇數(shù)個(gè)中文的時(shí)候會(huì)出現(xiàn)亂碼,而偶數(shù)個(gè)時(shí)就OK,當(dāng)然,我一開始試的就剛好是類似于"中文名.txt"子類的。于是殺到SVNWebClient的網(wǎng)站,在其論壇上看到已經(jīng)有人提了問題了,只是沒人問津,這不明擺著欺負(fù)中國人嘛!NND,只有發(fā)揚(yáng)開源精神,自己動(dòng)手了,盡管我是不會(huì)用SVNWebClient做SVN客戶端工具的,放著那么好的TortoiseSVN不用,不是自己找難受嘛。

    大體關(guān)于中文亂碼的問題,其實(shí)就是個(gè)編碼的問題,打開SVNWebClient的源碼,找到處理上傳的servlet:org.polarion.svnwebclient.util.Uploader.java,不是好好的嘛,用的是Jarkata的FileUpload,也做了utf8的轉(zhuǎn)碼,不應(yīng)該有錯(cuò)啊。在其轉(zhuǎn)換前后加了點(diǎn)調(diào)試代碼,發(fā)現(xiàn)沒有什么特別的東西。不過,聯(lián)想到以前用過的其它文件上傳組件,往往對(duì)中文的處理沒有考慮周全,正準(zhǔn)備將其代碼也下載下來研究一把,突然發(fā)現(xiàn)其最新的版本是1.1,而SVNWebClient使用的是1.0,心想不要其已經(jīng)自動(dòng)糾正了。下載新的版本,不過新版本還需要Jarkata的IO庫,一并下載,然后按照其文檔,改用最新的ServletFileUpload,重新編譯部署。這次亂得可比較徹底了,不管偶數(shù)個(gè)還是奇數(shù)個(gè)中文都是亂碼,不過,好在在轉(zhuǎn)換前后加了點(diǎn)調(diào)試,發(fā)現(xiàn)文件名在沒有轉(zhuǎn)換前竟然是正常的,于是幾次嘗試后,終于將其搞定。Uploader.java最新代碼如下:


    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了,世界上有那么多的各種各樣語言編寫的開源工具,干嘛不選一個(gè)自己熟悉的呢^_^。

    Uploader.java下載
    Uploader.class下載

    posted on 2006-05-14 20:11 Evan 閱讀(4858) 評(píng)論(11)  編輯  收藏 所屬分類: SE筆記

    評(píng)論

    # re: 關(guān)于用SVNWebClient提交中文文件名出錯(cuò)的問題 2006-05-16 09:38 傳說一夢
      除了修改Uploader.java文件,還要不要更新FileUpload的版本到1.1呢?
      plugin.xml文件中,好像一開始就有"<library name="lib/svncommons.jar">"一行的錯(cuò)誤。我修改了,但是又說"com.polarion.portal.tomcat.webapps"擴(kuò)展點(diǎn)找不到,不知道什么原因。再次請教。^_^

    -------------------------------------------------------------------
      上傳文件名確實(shí)存在奇偶數(shù)的問題,但我不能完全確認(rèn),所以只說有時(shí)有,有時(shí)沒有。
      我原來做.NET,今年換工作了,做JAVA。由于公司需要,要安裝SVNWebClient,好讓老板也容易使用。所以……  回復(fù)  更多評(píng)論
      

    # re: 關(guān)于用SVNWebClient提交中文文件名出錯(cuò)的問題 2006-05-16 09:41 傳說一夢
    應(yīng)該是用Eclipse編譯吧?Tomcat項(xiàng)目?再再次請教。:)  回復(fù)  更多評(píng)論
      

    # re: 關(guān)于用SVNWebClient提交中文文件名出錯(cuò)的問題 2006-05-16 09:46 傳說一夢
    再再再次請教:Jarkata的IO庫在什么地方使用呀?  回復(fù)  更多評(píng)論
      

    # re: 關(guān)于用SVNWebClient提交中文文件名出錯(cuò)的問題 2006-05-16 17:11 Evan
    @傳說一夢

    1. 直接導(dǎo)入Eclipse工程編譯即可,不要用它的maven配置;
    2. 將Jarkata的FileUpload和IO庫復(fù)制到其lib目錄,刪掉原來的1.0包,F(xiàn)ileUpload 1.1需要用到Commons IO;
    3. 或者直接下載我編譯好的Uploader.class吧,將其復(fù)制到tomcat的webapps\svnwebclient\WEB-INF\classes\org\polarion\svnwebclient\util目錄下,覆蓋原來的程序,然后將webapps\svnwebclient\WEB-INF\lib目錄下1.0的FileUpload包給刪掉,將最新的FileUpload和IO庫復(fù)制過來就可以了。

    Good luck:)  回復(fù)  更多評(píng)論
      

    # re: 關(guān)于用SVNWebClient提交中文文件名出錯(cuò)的問題 2006-05-27 08:49 浼犺涓€姊?Url=http://legendry.cnblogs.com
    3Q!  回復(fù)  更多評(píng)論
      

    # re: 關(guān)于用SVNWebClient提交中文文件名出錯(cuò)的問題 2006-06-22 12:47 傳說一夢
    我將你做的方案重新打包,以解決中文問題,地址如下:
    http://legendry.cnblogs.com/archive/2006/06/17/428424.html  回復(fù)  更多評(píng)論
      

    # re: 關(guān)于用SVNWebClient提交中文文件名出錯(cuò)的問題 2006-09-16 22:47 cuea
    你好,我用的是fileupload組件做的上傳。出現(xiàn)以下問題,,
    很急,能不能抽空幫我看下是什么問題??
    我用fileupload組件做上傳。。
    文件能夠上傳,只是上傳之后打開目標(biāo)文件后不能正常打開~
    如果是excel文件,打開會(huì)說是文件收到損壞,然后打開后就沒原來的格式了,文本沒變,圖片的話顏色會(huì)變
    不知道是在哪個(gè)環(huán)節(jié)除了問題 。

    因?yàn)槲沂蔷W(wǎng)上搜過來的。。所以可能找不到這里,能不能給我發(fā)封郵件,
    謝謝。cuea@163.com
    代碼都是標(biāo)準(zhǔn)的fileupload流程,并且有好心網(wǎng)友幫我在他們那試過。沒問題。

    所以我想請你幫個(gè)忙,謝謝。。  回復(fù)  更多評(píng)論
      

    # re: 關(guān)于用SVNWebClient提交中文文件名出錯(cuò)的問題 2008-05-12 16:57 Joh
    我按照您的方法把svnwebclient配置好了,中文文件上傳和下載都沒問題,但就是當(dāng)文檔全部是中文時(shí)會(huì)出現(xiàn),頁面顯示是亂碼問題。。。。  回復(fù)  更多評(píng)論
      

    # re: 關(guān)于用SVNWebClient提交中文文件名出錯(cuò)的問題 2008-05-26 12:35 Evan
    @Joh
    好久沒有用過svnwebclient了,先參考一下這里
      回復(fù)  更多評(píng)論
      

    # re: 關(guān)于用SVNWebClient提交中文文件名出錯(cuò)的問題 2008-12-31 10:59 徐金文
    請問誰將SVN Web Client 源碼導(dǎo)入workspace中了,而且沒有error。我的郵箱: xujinwen@gmail.com
    來上海就請你吃飯  回復(fù)  更多評(píng)論
      

    # re: 關(guān)于用SVNWebClient提交中文文件名出錯(cuò)的問題 2010-10-25 11:46 Ming.Sunday
    hi,Evan
    把你的Uploader.class下載來替換之后,上傳文件時(shí)竟然提示java.lang.NoSuchMethodError: org.polarion.svnwebclient.util.Uploader.doPost
    (Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljava/lang/String;Ljava/lang/String;)V
    at org.polarion.svnwebclient.web.servlet.FileAddActionServlet.executeSVNOperation(FileAddActionServlet.java:87)
    at org.polarion.svnwebclient.web.servlet.AbstractServlet.execute(AbstractServlet.java:63)
    at org.polarion.svnwebclient.web.servlet.FileAddActionServlet.doPost(FileAddActionServlet.java:73)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.polarion.svnwebclient.authorization.impl.BindSessionsFilter.doFilter(BindSessionsFilter.java:48)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.polarion.svnwebclient.web.CharsetFilter.doFilter(CharsetFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)

    是否有包沖突??
      回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲日韩国产欧美一区二区三区 | 一级毛片免费视频| 亚洲免费人成在线视频观看| 亚洲一本大道无码av天堂| 国产偷v国产偷v亚洲高清| 一区二区视频在线免费观看| 亚洲男人的天堂一区二区| 男人和女人高潮免费网站| 亚洲国产精品成人| 亚洲人成在线播放| 一区二区视频在线免费观看| 国产又大又粗又长免费视频| 午夜亚洲福利在线老司机| 国产成人综合亚洲绿色| 亚洲国产精品不卡毛片a在线| 亚洲女人初试黑人巨高清| 无码国产精品一区二区免费虚拟VR| 可以免费观看的一级毛片| 人人公开免费超级碰碰碰视频| 亚洲精品国产免费| 亚洲日韩中文无码久久| 外国成人网在线观看免费视频| 亚洲 综合 国产 欧洲 丝袜| 国产精品玖玖美女张开腿让男人桶爽免费看| 精品国产无限资源免费观看| 国产精品亚洲精品| 国产成人无码a区在线观看视频免费 | 亚洲一级特黄大片在线观看| 久久性生大片免费观看性| 亚洲国产精品国自产拍电影| 歪歪漫画在线观看官网免费阅读 | 国产麻豆成人传媒免费观看| 婷婷精品国产亚洲AV麻豆不片| 粉色视频成年免费人15次| 亚洲日韩国产精品第一页一区| 国产精品久久久久久亚洲小说| 丁香花在线观看免费观看 | 久久久久亚洲AV无码专区桃色| 亚洲中文字幕久久精品无码VA| 精品免费tv久久久久久久| 亚洲午夜在线播放|