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

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

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

    每日一得

    不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發
    最近關心的內容:SSH,seam,flex,敏捷,TDD
    本站的官方站點是:顛覆軟件

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks
    key words: jsp文件下載 中文亂碼 文件名亂碼

    文件上傳參看: 這里

    碰到文件亂碼,google了一下,發現這篇文章還不賴

    摘錄如下:


    之前,寫過一個Download.jsp文件,可以解決下載文件亂碼問題(諸如:DOC,XSL文件等等).
    后來發現,遇到中文名的文件的時候,文件下載將會報錯~~~~
    今天,通過改寫原Download.jsp文件已經徹底解決了這個問題~
    現在,把一整套的文件上傳下載的方法給貼出來~~~以便大家借鑒!~!~!~!~!?
    作者:古埃及法老

    download.jsp文件
    ---------------------------------------------------------
    <%
    ??java.io.BufferedInputStream?bis
    =null;
    ??java.io.BufferedOutputStream??bos
    =null;
    try{
    ?
    String?filename=request.getParameter("filename");
    ?????????????filename
    =new?String(filename.getBytes("iso8859-1"),"gb2312");
    ?response.setContentType(
    "application/x-msdownload");
    ?response.setHeader(
    "Content-disposition","attachment;?filename="+new?String(filename.getBytes("gb2312"),"iso8859-1"));
    ?bis?
    =new?java.io.BufferedInputStream(new?java.io.FileInputStream(config.getServletContext().getRealPath("files/"?+?filename)));
    ?bos
    =new?java.io.BufferedOutputStream(response.getOutputStream());?
    ?
    byte[]?buff?=?new?byte[2048];
    ?
    int?bytesRead;
    ?
    while(-1?!=?(bytesRead?=?bis.read(buff,?0,?buff.length)))?{
    ??bos.write(buff,
    0,bytesRead);
    ?}
    }
    catch(Exception?e){
    ?e.printStackTrace();
    }
    finally?{
    ?
    if?(bis?!=?null)bis.close();
    ?
    if?(bos?!=?null)bos.close();
    }
    %>?


    注意,關鍵就是setHeader里的filename需要重新編碼,格式是ISO-8859-1就OK了

    以下是我自己項目中用到的代碼片斷,供參考:

    list.jsp: 顯示附件名稱的頁面
    <tr>
    ????????????
    <td?height="25"?class="tdcor">&nbsp;&nbsp;&nbsp;</td>
    ????????????
    <td?colspan="3"?height=50>
    ????????????????
    <%
    ????????????????????
    if?(null?!=?publish.getAttatchFilename()?&&
    publish.getAttatchFilename().length()?
    >?0)?{
    ????????????????
    %>
    ????????????????
    <a?href="publish_do.jsp?method=download&fileName=
    <%=URLEncoder.encode(publish.getAttatchFilename(),"
    GBK")%>">
    <%
    =URLDecoder.decode(publish.getAttatchFilename(),"GBK")%></a>
    ????????????????
    <%
    ????????????????????}
    ????????????????
    %>
    ????????????
    </td>
    </tr>

    download.jsp:下載頁面
    else?if?(null?!=?method?&&?method.equals("download"))?{//下載附件

    ????????String?fileName?
    =?request.getParameter("fileName");
    ????????File?file?
    =?new?File(Constants.PUBLISH_FILE_PATH?+?"/"?+?URLDecoder.decode(fileName,"GBK"));
    ????????response.reset();
    ????????response.setContentType(
    "application/octet-stream;?charset=GBK");
    ????????response.addHeader(
    "Content-Disposition",?"attachment;?filename="?+?CourseDetailBusiness.transfer(URLDecoder.decode(fileName,"GBK"),"GBK","ISO-8859-1"));
    ????????response.setContentLength((
    int)?file.length());

    ????????
    byte[]?buffer?=?new?byte[4096];
    ????????BufferedOutputStream?output?
    =?null;
    ????????BufferedInputStream?input?
    =?null;

    ????????
    //?寫緩沖區:
    ????????try?{
    ????????????output?
    =?new?BufferedOutputStream(response.getOutputStream());
    ????????????input?
    =?new?BufferedInputStream(new?FileInputStream(file));

    ????????????
    int?n?=?(-1);
    ????????????
    while?((n?=?input.read(buffer,?0,?4096))?>?-1)?{
    ????????????????output.write(buffer,?
    0,?n);
    ????????????}
    ????????????response.flushBuffer();
    ????????}
    ????????
    catch?(Exception?e)?{
    ????????}?
    //?maybe?user?cancelled?download
    ????????finally?{
    ????????????
    if?(input?!=?null)?input.close();
    ????????????
    if?(output?!=?null)?output.close();
    ????????}


    說明:
    1。文件名在數據庫中保存的編碼為URLEncode
    2.在list.jsp顯示的時候多了一次encode,不知為什么,不encode一次還不行,實際上是第二次編碼了


    posted on 2006-06-14 22:48 Alex 閱讀(35511) 評論(35)  編輯  收藏 所屬分類: web技術

    評論

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2006-06-15 01:10 黑蝙蝠
    感謝你啊 我遇到這個問題好久了啊 一直沒找到解決方法!
    只有用英文名字代替!  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2006-06-15 09:04 寒晴天
    DYG  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2006-06-16 13:33 google
    B CUO  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2006-06-19 21:31 Hi
    多謝,哥們,非常感謝  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2006-08-10 10:53 一路順風
    讓人非常感激的文章 樓下多轉摘哦   回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2006-09-19 09:53 myloveroot
    兩個download.jsp文件,他們的代碼組合到一起嗎?  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2006-09-21 09:52 renyprrrre\
    兩個download.jsp文件怎么用  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2006-10-09 16:58 Java初心
    好文章啊  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2006-10-30 17:12 bobo[匿名]
    SRVE0026E: [Servlet 錯誤]-[已獲取輸出流]:java.lang.IllegalStateException: 已獲取輸出流
    at com.ibm.ws.webcontainer.srt.SRTServletResponse.getWriter(SRTServletResponse.java:545)
    at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java(Compiled Code))
    at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:193)
    at org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:246)
    at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:197)
    at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:255)
    at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:249)
    at org.apache.jsp._down_5F_document._jspService(_down_5F_document.java:219)
    at com.ibm.ws.webcontainer.jsp.runtime.HttpJspBase.service(HttpJspBase.java:89)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
    at com.ibm.ws.webcontainer.jsp.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:344)
    at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.serviceJspFile(JspServlet.java:683)
    at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.service(JspServlet.java:781)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
    at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java(Compiled Code))
    at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java(Compiled Code))
    at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java(Compiled Code))
    at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java(Inlined Compiled Code))
    at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java(Compiled Code))
    at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java(Compiled Code))
    at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java(Inlined Compiled Code))
    at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java(Compiled Code))
    at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java(Compiled Code))
    at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java(Compiled Code))
    at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java(Compiled Code))
    at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java(Compiled Code))
    at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java(Compiled Code))
    at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java(Compiled Code))
    at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java(Compiled Code))
    at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java(Compiled Code))
    at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java(Compiled Code))
    at com.ibm.ws.http.HttpConnection.run(HttpConnection.java(Compiled Code))
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))


    怎么解決  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2006-12-11 19:53 BeanSoft
    這個... 用 Weblogic 似乎也是同樣的錯誤..

    貌似要先調用一下 response.reset();  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2006-12-11 19:58 BeanSoft
    http://www.tkk7.com/beansoft/archive/2006/12/11/87034.html

    看看我轉的這個文章...

    JSP文件下載及出現getOutputStream() has already been called for ...的解決方法  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2007-01-27 16:00 老大感謝!
    說什么好呢?只能說樓主我太愛你了。你的那句
    new String(filename.getBytes("gb2312"),"iso8859-1"));拯救了我,謝謝!  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2007-03-20 17:19 mathfych
    hao  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2007-11-29 15:19 rocker100
    @黑蝙蝠
    說什么很好,只能說樓主我太愛你了。  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2008-04-23 15:04 三水少
    好帖,贊!  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2008-04-29 10:36
    好東西  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2008-07-21 11:19 午夜晴天
    謝過。。。。。。。。。。。。。
    filename=new String(filename.getBytes("iso8859-1"),"gb2312");
    filename=new String(filename.getBytes("iso8859-1"),"gb2312");
    filename=new String(filename.getBytes("iso8859-1"),"gb2312");
    filename=new String(filename.getBytes("iso8859-1"),"gb2312");
    filename=new String(filename.getBytes("iso8859-1"),"gb2312");
    filename=new String(filename.getBytes("iso8859-1"),"gb2312");
    filename=new String(filename.getBytes("iso8859-1"),"gb2312");
    filename=new String(filename.getBytes("iso8859-1"),"gb2312");
    filename=new String(filename.getBytes("iso8859-1"),"gb2312");
    filename=new String(filename.getBytes("iso8859-1"),"gb2312");
      回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2008-11-20 16:11 游客
    為什么我的還是解決不了  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2008-11-20 16:13 游客
    我的環境是tomcat5.5、mysql4.0  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2008-11-20 16:30 游客
    當我用 String fileName = "測試.doc";
    可以正常顯示
    但是我用 String fileName = request.getParameter("filename");
    還是顯示亂碼!!

    怎么回事啊?!?!  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2009-03-20 09:01 游客
    好文章  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2009-03-20 09:02 游客
    www.chinaitlab.com  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2009-03-20 09:02 游客
    http://www.tkk7.com/alex/archive/2006/06/14/52855.aspx  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2009-03-20 09:03 游客
    http://www.baidu.com  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2009-03-20 09:04 游客
    d:\\hao.txt  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決[未登錄] 2009-12-22 09:14 xma
    作者真是幫了我大忙,讓我知道這個問題的內在原因了,謝謝作者的好帖,大家幫忙頂啊。  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2010-07-23 09:49
    謝謝了, String filename=new String(file.getBytes("iso8859-1"),"gb2312");
    真有用,要不我還不知道怎么做呢。  回復  更多評論
      

    # 已獲得輸出流 2011-05-03 21:34 唯一
    @bobo[匿名]
    在處理下載的jsp頁面加上
    out.clear();
    out = pageContext.pushBody();  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2011-06-02 09:25 小佳
    感謝樓主啊  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2011-06-02 09:25 小佳
    感謝樓主  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2012-04-05 22:17 撐一支長篙
    感謝樓主,真多虧那一句new String(filename.getBytes("gb2312"),"iso8859-1")),也多謝前面特別提及這一句的兄弟  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2012-09-27 10:47 jiangwei
    把中文的文件名字進行URLEncoder.encode(filenamedisplay, "UTF-8")(filenamedisplay:文件名稱)  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2013-04-19 15:34 abby
    非常好用 謝謝  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2013-07-09 14:37 txt小說下載
    亂碼一直令我感到非常頭疼。  回復  更多評論
      

    # re: jsp實現文件下載與中文文件名亂碼問題解決 2013-10-15 20:54 程瓊
    樓主愛你啊!!!  回復  更多評論
      

    主站蜘蛛池模板: 亚洲色欲久久久久综合网| 两个人www免费高清视频| 亚洲三级中文字幕| 亚洲a一级免费视频| 亚洲国产成人久久综合一| 亚洲成av人在线视| 一级毛片免费不卡在线| 亚洲精品美女久久久久| 四虎在线最新永久免费| 国产精品亚洲精品| 三级黄色免费观看| 亚洲色图在线播放| 青青青视频免费观看| 国产亚洲精品无码拍拍拍色欲| 亚洲精品视频免费 | 日韩免费高清大片在线| 好男人视频社区精品免费| 国产亚洲精久久久久久无码| 四虎国产精品永久免费网址| 亚洲专区中文字幕| 免费国产小视频在线观看| a免费毛片在线播放| 久久精品国产亚洲AV麻豆网站| 一区二区三区免费视频观看| 最新69国产成人精品免费视频动漫 | 99亚洲男女激情在线观看| 亚洲精品国产福利一二区| 久久免费观看国产精品88av| www.亚洲成在线| 97人妻无码一区二区精品免费| 亚洲av永久无码精品漫画| 亚欧免费视频一区二区三区| 亚洲综合精品伊人久久| 亚洲成人免费在线观看| 亚洲成AV人片在线观看| 国产桃色在线成免费视频 | 亚洲乱理伦片在线观看中字| 亚洲综合日韩久久成人AV| 国产免费一区二区三区免费视频| 91精品国产亚洲爽啪在线影院| a级毛片免费播放|