<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 閱讀(35501) 評論(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://m.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://m.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 程瓊
    樓主愛你啊!!!  回復  更多評論
      

    主站蜘蛛池模板: 国产AV无码专区亚洲AV麻豆丫| 亚洲午夜成人精品电影在线观看| 亚洲国产日韩一区高清在线| 在线免费播放一级毛片| 亚洲日韩精品一区二区三区 | 青青青青青青久久久免费观看| 亚洲粉嫩美白在线| 日韩免费电影在线观看| 色婷婷亚洲一区二区三区| 亚洲精品国产电影| 国产免费一区二区三区不卡| 久久精品亚洲综合专区| 亚洲免费在线观看视频| 亚洲中文字幕久在线| 国产成人无码a区在线观看视频免费| 久久亚洲AV成人无码国产电影| 亚洲成a人无码av波多野按摩| 两个人日本WWW免费版| 亚洲色图黄色小说| 四虎影视www四虎免费| 色老头综合免费视频| 久久精品国产精品亚洲艾| 亚洲色在线无码国产精品不卡 | 国产一级一毛免费黄片| 亚洲AV综合色区无码一区爱AV| 亚洲欧洲免费视频| 亚洲日本VA中文字幕久久道具| 又粗又硬又黄又爽的免费视频| 久久一区二区免费播放| 亚洲欧洲日本天天堂在线观看| 国产男女猛烈无遮挡免费视频网站 | 美女无遮挡免费视频网站| 亚洲熟妇无码AV在线播放| 无人在线直播免费观看| 黄色免费网址大全| 亚洲精品福利网泷泽萝拉| 国产免费怕怕免费视频观看| 久久国产免费一区| 在线亚洲v日韩v| 亚洲男人天堂影院| 亚洲人成网站在线观看青青|