<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      28 隨筆 :: 0 文章 :: 73 評論 :: 0 Trackbacks

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

    大體關于中文亂碼的問題,其實就是個編碼的問題,打開SVNWebClient的源碼,找到處理上傳的servlet:org.polarion.svnwebclient.util.Uploader.java,不是好好的嘛,用的是Jarkata的FileUpload,也做了utf8的轉碼,不應該有錯啊。在其轉換前后加了點調試代碼,發現沒有什么特別的東西。不過,聯想到以前用過的其它文件上傳組件,往往對中文的處理沒有考慮周全,正準備將其代碼也下載下來研究一把,突然發現其最新的版本是1.1,而SVNWebClient使用的是1.0,心想不要其已經自動糾正了。下載新的版本,不過新版本還需要Jarkata的IO庫,一并下載,然后按照其文檔,改用最新的ServletFileUpload,重新編譯部署。這次亂得可比較徹底了,不管偶數個還是奇數個中文都是亂碼,不過,好在在轉換前后加了點調試,發現文件名在沒有轉換前竟然是正常的,于是幾次嘗試后,終于將其搞定。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;
    ????}
    }

    另外,不懂或者不愿意去學Java的人就不要用SVNWebClient和sventon了,世界上有那么多的各種各樣語言編寫的開源工具,干嘛不選一個自己熟悉的呢^_^。

    Uploader.java下載
    Uploader.class下載

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

    評論

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

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

    # re: 關于用SVNWebClient提交中文文件名出錯的問題 2006-05-16 09:41 傳說一夢
    應該是用Eclipse編譯吧?Tomcat項目?再再次請教。:)  回復  更多評論
      

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

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

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

    Good luck:)  回復  更多評論
      

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

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

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

    因為我是網上搜過來的。。所以可能找不到這里,能不能給我發封郵件,
    謝謝。cuea@163.com
    代碼都是標準的fileupload流程,并且有好心網友幫我在他們那試過。沒問題。

    所以我想請你幫個忙,謝謝。。  回復  更多評論
      

    # re: 關于用SVNWebClient提交中文文件名出錯的問題 2008-05-12 16:57 Joh
    我按照您的方法把svnwebclient配置好了,中文文件上傳和下載都沒問題,但就是當文檔全部是中文時會出現,頁面顯示是亂碼問題。。。。  回復  更多評論
      

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

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

    # re: 關于用SVNWebClient提交中文文件名出錯的問題 2010-10-25 11:46 Ming.Sunday
    hi,Evan
    把你的Uploader.class下載來替換之后,上傳文件時竟然提示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)

    是否有包沖突??
      回復  更多評論
      

    主站蜘蛛池模板: 亚洲AV日韩AV永久无码免下载| 成人免费视频一区二区| 中文精品人人永久免费 | 亚洲天堂一区在线| 成人无码视频97免费| 在线观看免费精品国产| 亚洲一级免费视频| 日韩人妻无码精品久久免费一 | 永久免费看mv网站入口| 亚洲色欲色欲综合网站| 久草免费福利在线| 亚洲中文字幕无码爆乳av中文| 亚洲AV成人无码网站| 日韩一级在线播放免费观看| 中国亚洲呦女专区| 成人毛片手机版免费看| 亚洲娇小性色xxxx| www.黄色免费网站| 亚洲人成图片网站| 18禁无遮挡无码网站免费| 在线观看亚洲AV日韩AV| 日韩精品成人无码专区免费 | 亚洲高清免费视频| 日本永久免费a∨在线视频| 日本a级片免费看| 国产精品亚洲а∨无码播放不卡| 日本免费一区二区三区最新vr| 亚洲精品无码久久久久久久| 成全视频免费高清 | 亚洲综合色自拍一区| 久久精品免费一区二区| 亚洲AV无码一区二区一二区| 在线观看午夜亚洲一区| 97免费人妻无码视频| 一级毛片在线免费视频| 日韩亚洲Av人人夜夜澡人人爽| 黄网址在线永久免费观看| a级黄色毛片免费播放视频| 亚洲av永久无码嘿嘿嘿| 国产成人毛片亚洲精品| 日韩视频在线精品视频免费观看|