`
feigme
  • 浏览: 153055 次
  • 性别: Icon_minigender_1
  • 来自: 球面世界
社区版块
存档分类
最新评论

jsp实现文件下载与中文文件名乱码问题解决

    博客分类:
  • Java
阅读更多
之前,写过一个Download.jsp文件,可以解决下载文件乱码问题(诸如:DOC,XSL文件等等).
后来发现,遇到中文名的文件的时候,文件下载将会报错~~~~
今天,通过改写原Download.jsp文件已经彻底解决了这个问题~
现在,把一整套的文件上传下载的方法给贴出来~~~以便大家借鉴!~!~!~!~! 
作者:古埃及法老

download.jsp文件
---------------------------------------------------------
<!----><!----> 


注意,关键就是setHeader里的filename需要重新编码,格式是ISO-8859-1就OK了

以下是我自己项目中用到的代码片断,供参考:

list.jsp: 显示附件名称的页面
<!----><tr>
            
<td height="25" class="tdcor">   td>
            
<td colspan="3" height=50>
                
<!---->
                
<href="publish_do.jsp?method=download&fileName=
<!---->
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, 04096)) > -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一次还不行,实际上是第二次编码了

分享到:
评论
1 楼 tiansong163 2013-04-12  
我用这个怎么不行呢?

相关推荐

Global site tag (gtag.js) - Google Analytics