`
qindongliang1922
  • 浏览: 2183215 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117507
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125901
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59878
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71283
社区版块
存档分类
最新评论

JSP下载中文名乱码问题

阅读更多
上传下载功能,几乎是一个Web应用中必不可少的功能,下载来说,通常我们有两种方式来实现,第一种直接使用超链接的方式连接到一个文件地址进行下载,但是如果txt的格式的话,则会直接打开在页面上,有点不符合下载的意思,其他的还好,最好整成一个压缩包的方式进行下载,第二种的方式使用JAVA的流下载,这种方式比较通用,一般基于一些WEB层框架如Struts,Spirng MVC实质上也是封装了流。



散仙写本篇博客的目的,就是记录下使用流下载期间遇到的一系列小问题,比如说,下载的中文名乱码,各个浏览器之间的不兼容,以及下载文件过大报内存溢出的异常等等,方便日后搞这方面的时候,少绕些弯子。


首先,先来看第一个问题,关于乱码的问题,这个问题其实还是很好解决的,主要有两步,第一在你的web容器里设置URL编码,比如散仙用的tomcat,设置编码为UTF-8即可。
  <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8" />

第二步需要在你流返回的时候设置字符编码即可。

接下来,我们看第二个问题,各个浏览器下载的文件名不一致,还有部分乱码问题,这是由于浏览器的兼容性问题造成的,所以我们单独对IE的浏览器做下处理,然后火狐与谷歌等其他大部分浏览器为一套,代码如下:

判断是否为,IE浏览器的代码:
/**
	 * 判断是否为IE浏览器
	 * */
	public static boolean isIE(){  
	    return ServletActionContext.getRequest().getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 ? true : false;  
	}  

下载各种文件的核心代码:
	/**
	 * 提供文件下载的方法
	 * 
	 * **/
	public void downloadFile(){
		HttpServletResponse response = ServletActionContext.getResponse();
		try {
			
	        
			String fileFullName = "D:/mydata/" + downLoadName;
			System.out.println(fileFullName);
			 response.setCharacterEncoding("utf-8");
			 response.reset();
            response.setContentType("text/plain;charset=utf-8");//文本格式
   		 if(isIE()){
   			 //处理IE 的头部信息
             response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileFullName.substring(fileFullName
     				.lastIndexOf("/")+1),Charsets.UTF_8.toString()));
         }else{
        	 //处理其他的头部信息
              response.setHeader("content-disposition", "attachment;filename="+new String(fileFullName.substring(fileFullName
     				.lastIndexOf("/")+1).getBytes(Charsets.UTF_8), Charsets.ISO_8859_1));
         }
	 
   		 //向客户端输入流下载
			response.getOutputStream().write(FileUtils.readFileToByteArray(new File(fileFullName)));


 
		  
		} catch (Exception e) {
			// TODO: handle exception
		}
		 
	}


接下来,我们来看第三个问题,下载的时候由于文件比较大,然后会报内存溢出的异常。

这种问题,一般也有两种解决方法,第一种切分大文件采用分而治之的方法下载,然后在下载的使用java.zip包里的工具类,进行压缩传输即可。第二种的就是调大JVM的内存和tomcat的内存,一般在正式的环境里服务器的配置应该会比较大,所以采取这种方法也是一种不错的方法。


至此,我们可以正常的进行下载了。

下载txt的文件:








  • 大小: 62.4 KB
  • 大小: 61.4 KB
分享到:
评论

相关推荐

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

    本文将深入解析如何在JSP中实现文件下载,并解决中文文件名乱码的问题。 首先,我们需要了解HTTP协议在处理文件下载时的角色。当用户请求下载一个文件时,服务器需要设置响应头来指示浏览器如何处理这个响应。在JSP...

    JSP页面中文乱码几个解决办法

    在开发基于Java的Web应用程序时,常常会遇到中文乱码的问题,尤其是在JSP和Servlet中。JSP页面中文乱码的出现通常是由于字符编码不一致导致的,这会影响到用户的正常浏览体验。以下是一些常见的解决办法: 1. **JSP...

    jspsmart for 中文乱码

    解决使用smartupload中文名乱码的问题

    jsp+mysql中文乱码解决方案集合

    在使用JSP结合MySQL进行Web应用开发时,中文乱码问题一直是困扰开发者的一大难题。本文将详细介绍如何在MySQL数据库层面解决中文乱码问题,并提供一系列实用的方法和技巧。 #### MySQL配置文件(my.cnf)设置 在...

    jsp 过滤器中文乱码的处理

    在开发Java Web应用程序时,尤其是使用JSP技术时,经常遇到的一个问题是中文乱码问题。中文乱码通常出现在用户输入的中文数据在传输过程中没有正确地进行编码和解码,导致字符显示异常。本篇文章将详细讲解如何处理...

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

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

    jsp用过滤器解决中文乱码问题的方法.docx

    jsp 用过滤器解决中文乱码问题的方法 jsp(JavaServer Pages)是一种广泛应用于Web开发的技术,但是在实际开发中,我们经常会遇到中文乱码问题。为了解决这个问题,我们可以使用jsp过滤器来实现编码设置。我今天要...

    支持中文名上传 支持中文名下载 无乱码 jspsmartupload

    支持中文名上传 支持中文名下载 无乱码 jspsmartupload 用它做了很多项目 非常好用 但是自己要会用哈

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

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

    如何配置Filter过滤器处理JSP中文乱码

    通过以上四个步骤,你可以有效地解决JSP中文乱码问题。当请求到达服务器时,Filter会自动设置请求和响应的字符编码,确保数据在传输过程中不发生乱码。同时,Tomcat服务器配置的`URIEncoding`确保URL中的中文字符也...

    jspsmartupload中文乱码解决版

    本篇将详细讨论如何解决`jspsmartupload`中的中文乱码问题,并结合`struts1.2`框架提供实例。 首先,理解乱码产生的原因至关重要。乱码通常是由字符编码的不匹配导致的。在HTTP请求中,数据默认是以ISO-8859-1编码...

    jsp 过滤器——解决中文乱码问题

    ### jsp过滤器——解决中文乱码问题 #### 背景介绍 在Web应用开发过程中,特别是使用Java Server Pages (JSP)进行中文字符处理时,经常遇到的一个问题是中文字符显示为乱码。这主要是因为客户端与服务器端之间存在...

    java项目jsp中乱码问题解决

    在Java项目开发中,尤其是使用JSP技术时,经常遇到的中文乱码问题是一个常见的困扰。这涉及到编码和解码的过程,以及不同平台和环境之间的兼容性问题。Java的默认编码是Unicode,而中文文件和数据库通常使用GB2312或...

    EL中文显示乱码的解决办法

    在使用EL(Expression Language)表达式处理中文字符时,可能会遇到中文显示乱码的问题,这通常是由于字符编码不一致导致的。以下是一些详细的解决步骤和相关知识点: 1. **理解字符编码**: - 字符编码是用来表示...

    JSP中文乱码解决

    在开发Java Web应用程序时,尤其是使用JSP技术时,经常遇到中文乱码的问题。这个问题通常是由于字符编码不一致导致的。下面将详细解释如何解决JSP中的中文乱码问题,并结合给定的文件内容进行说明。 1. **理解乱码...

    smartUpLoad终极版,完全解决中文路径乱码问题

    然而,当涉及到中文路径时,可能会出现乱码问题,这是由于字符编码不兼容导致的。"smartUpLoad终极版"是一个专为解决这个问题而设计的上传组件,它能够确保在处理包含中文路径的文件时,文件名和路径保持正确无误。 ...

    jsp中文显示问号问题解决方法.docx

    * JSP 中的中文乱码问题解决方法 * JSP 中的参数传递问题解决方法 * JSP 中的 JS 文件加载问题解决方法 * JSP 中的 HTML乱码问题解决方法 * JSP 中的 IE浏览器问题解决方法 * JSP 中的 SQL Server 连接问题解决方法 ...

    乱码问题的解决

    "乱码问题的解决" 在 Web 开发中,乱码问题是常见的难题之一。乱码问题的出现主要是由于编码不一致引起的。编码不一致可能出现在多个方面,如页面编码、服务器编码、客户端编码、数据库编码等。在本文中,我们将...

    如何处理JSP中文乱码问题,IBM portal 中文乱码.docx

    首先,解决JSP中文乱码问题的关键在于确保编码的一致性。如果Java源文件(包括JSP)中包含中文,应避免直接在源文件中写入中文,除非明确指定源文件的编码方式。例如,使用`-encoding GBK`、`-encoding gb2312`或`-...

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

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

Global site tag (gtag.js) - Google Analytics