`
icarusliu
  • 浏览: 237168 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • web
阅读更多

之前,写过一个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) {
                
%>
                
<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, 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一次还不行,实际上是第二次编码了

分享到:
评论

相关推荐

    ( response.setHeader()下载中文文件名乱码

    ( response.setHeader()下载中文文件名乱码问题

    [jspSmartUpload]------------>jspSmartUpload上传中文文件名 乱码问题

    标题中的“jspSmartUpload上传中文文件名乱码问题”是一个常见的技术挑战,特别是在处理Web应用程序时,特别是那些涉及用户上传文件的场景。JSP Smart Upload是早期流行的一个用于Java Web应用的文件上传组件,它...

    多文件上传例子(解决中文乱码)

    多文件上传例子,彻底解决中文乱码问题了。总结中文乱码问题如下: 1、所有页面都用UTF-8。 2、写过滤器,设置request.setCharacterEncoding("UTF-8")。 3、javascript脚本里用encodeURI(str)。 4、适当的时候,在...

    不同浏览器上中文文件名的下载乱码问题

    不同浏览器上中文文件名的下载乱码问题 浏览器IEChromeSafariOpera 浏览器能正确识别的编码格式

    jsp SmartUpload 中文乱码问题解决.docx

    jsp SmartUpload 中文乱码问题解决是指在使用 jsp 的 SmartUpload 组件进行文件上传下载时,遇到中文乱码问题的解决方法。在这篇文章中,我们将介绍如何解决 jsp 中 SmartUpload 中文乱码问题。 一、上传 在使用 ...

    jspsmartupload上传组件解决中文标题乱码

    jspsmart上传组件,解决中文标题乱码,已修改源码为utf-8

    jspsmartupload-解决中文乱码

    最近实验室做了一个项目,使用jspsmartupload来实现的文件的上传下载,原来在windows平台运行的挺好,但是后来系统移植到linux平台上,结果在上传或下载的文件名中有中文时就会出现乱码。后来查了网上一些人的解决...

    jsp文件上传,解决中文乱码

    接下来,我们将深入探讨如何解决`JSP文件上传`时的中文乱码问题。 首先,我们需要理解文件上传的基本流程。在`JSP`中,通常会使用`&lt;form&gt;`标签的`enctype="multipart/form-data"`属性来定义一个支持文件上传的表单...

    jspsmart包解决上传与下载乱码问题

    通过修改源码,解决了上传与下载时候的乱码问题,

    jspsmart上传下载文件实例中文

    5. **处理编码问题**:JSpsmart实例中特别注意了文件名乱码问题,确保文件名在上传和下载过程中保持正确。 ### 二、JSpsmart工作流程 1. **初始化SmartUpload对象**:在JSP或Servlet中创建SmartUpload实例,并进行...

    jsp文件的上传和下载

    本项目专注于解决在JSP中实现文件上传和下载时遇到的一些常见问题,特别是针对中文文件名的处理。下面我们将深入探讨这个主题。 首先,文件上传通常涉及到HTTP协议中的multipart/form-data类型表单。在JSP中,我们...

    利用过滤器解决JavaWeb(JSP)的乱码问题

    总之,解决JavaWeb中的乱码问题需要从多个层面进行考虑:设置过滤器统一请求和响应的编码,确保JSP页面的编码正确,以及在处理文件时注意文件内容的编码。通过这些方式,我们可以有效防止和解决乱码问题,提高应用...

    jsp中文乱码的解决方案

    文档《JSP各种乱码的处理(一).doc》和《JSP各种乱码的处理(二).doc》中可能详细列举了各种JSP乱码问题的实例及解决方法,包括但不限于文件上传、读取流、数据库操作等方面,建议参考学习,以便更全面地理解并解决...

    jspSmartUpload.jar真正解决中文文件和中文参数乱码问题

    jspSmartUpload.jar, 这个经本人测试修改,已可真正解决中文乱码问题,包括中文参数和含中文路径及中文文件名乱码问题。

    SmartUpload 用于JDK1.5(中文终极解决版,包括中文文件名上传后乱码,中文参数,下载)

    经过呕心沥血的一天一夜,终于搞定SmartUpload组件的所有中文问题,为大家去除有史以来最头痛的中文问题,包括中文参数,中文文件名上传后服务器端文件名乱码问题,以及中文文件名下载问题。 这是我的中文解决终极...

    解决中文乱码问题

    "解决中文乱码问题" 在Java编程中,中文乱码是一个常见的问题。为了解决这个问题,我们需要从多个方面入手。首先,我们需要将Eclipse的编码方式设置为UTF-8,以便正确地显示中文字符。其次,我们需要在浏览器中将...

    jspSmartUpload组件(已解决中文乱码问题)

    然而,由于`jspSmartUpload`最初是由非中文开发者创建的,因此在处理包含中文字符的文件名时,可能会出现乱码问题,这给使用中文的开发者带来了困扰。 在描述中提到,这个问题已经得到了解决,意味着作者对`jsp...

    JSP乱码 N种解决方案

    - 如果涉及到图片或二进制文件上传,乱码问题通常不涉及字符编码,但要确保文件名的编码与服务器接收的一致。 14. **错误日志和输出流** - 确保错误日志的编码设置正确,同时在使用`System.out.println()`或`...

Global site tag (gtag.js) - Google Analytics