`
Kevin12
  • 浏览: 234852 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

struts2文件下载文件中文名称乱码解决

阅读更多
链接地址:http://kevin12.iteye.com/blog/1947631
   
前段时间做项目时候,用到了struts2下载xml文件,实现的功能时将流程图从数据库导出到客户端(本地),但是文件名称使用的流程名称和时间戳来命名的,当文件名称是中文时候,通过浏览器下载到客户端有时候是乱码的情况,主要考虑了FireFox和IE浏览器。

    解决思路是在前台通过javascript判断用户使用的是什么浏览器,通过变量记录下来,并拼接到url上,在后台判断浏览器的类型,通过不同的方式解决乱码问题。

上面的思路很好,也能解决问题,但是将项目打成war包发布到虚拟机中的tomcat中后,在虚拟机中的IE去下载xml文件,还会出现中午乱码问题。百思不得其解啊!!!!

    我电脑是win7 64位,浏览器是IE9,而虚拟机中的系统是XP系统,浏览器是IE6并安装了IE8的插件,但是虚拟机中的火狐浏览器没有出现文件名中文时候乱码的情况。
   现在通过查阅资料终于解决了虚拟机中IE中文名称乱码问题,下面是部分代码:
	/**
	 * 
	 * @Description: 将流程信息导出为xml文件
	 * @Auther: lujinyong
	 * @Date: 2013-9-10上午09:55:34
	 */
	public String exportWorkflowXml(){
		WebWorkflowMainService workflowMainService = (WebWorkflowMainService) getServiceBean("webWorkflowMainService");
		WebWorkflowNodeService workFlowNodeService = (WebWorkflowNodeService) getServiceBean("webWorkflowNodeService");
		try {
			TbBWebWorkflOwMain main = workflowMainService.findByWorkFlowId(returnFlowId);
			List<TbBWebWorkflOwNode> nodes = workFlowNodeService.findByWorkFlowId(main.getWwmWorkflowId());
			Date date = new Date();
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(date);
			String time = String.valueOf(calendar.get(Calendar.YEAR))
			+String.valueOf(calendar.get(Calendar.MONTH)+1)
			+String.valueOf(calendar.get(Calendar.DAY_OF_MONTH))
			+String.valueOf(calendar.get(Calendar.HOUR_OF_DAY))
			+String.valueOf(calendar.get(Calendar.MINUTE))
			+String.valueOf(calendar.get(Calendar.SECOND));
			//解决文件名中文乱码问题
			/*火狐没问题,ie出现了问题  
			fileName = new String((main.getWwmWorkflowName()+"_"+time+".xml").getBytes("UTF-8"), "ISO8859-1");
			 */
			/*ie没问题,火狐出现问题
			 */
//			fileName = new String((main.getWwmWorkflowName()+"_"+time+".xml").getBytes(), "UTF-8");  
//			fileName = java.net.URLEncoder.encode(fileName, "UTF-8"); // 这句很重要,不然文件名为乱码  
			//通过javascript获取浏览器的类型,用url传过来进行判断解决中文乱码
			if("Firefox".equalsIgnoreCase(explorerType)){
				fileName = new String((main.getWwmWorkflowName()+"_"+time+".xml").getBytes("UTF-8"), "ISO8859-1");
			}else{
//				fileName = new String((main.getWwmWorkflowName()+"_"+time+".xml").getBytes(), "UTF-8");  
//				fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
//				fileName=fileName.replace("+", "%20"); 
				//解决在虚拟机(系统是XP)IE导出下载文件中文名称乱码的问题
				fileName = new String((main.getWwmWorkflowName()+"_"+time+".xml"));
				getHttpResponse().setCharacterEncoding("UTF-8");
				fileName=java.net.URLEncoder.encode(fileName,"UTF-8");
	            getHttpResponse().setHeader("Content-Disposition", "attachment; filename=" +new String(fileName.getBytes("UTF-8"),"GBK")); 
			}
			Document document = NodeXmlFactory.sql2Xml(main,nodes);
			/**将document保存到xml中,保存到客户端 */
			xmlStream = new ByteArrayInputStream(document.asXML().getBytes());
			xmlStream.close();
			/**下面注释的代码可将document写到xml中并保存到服务器*/
//			FileOutputStream xmlOut = new FileOutputStream(new File("mysql_back.xml"));
//			XMLWriter xmlWriter = new XMLWriter(xmlOut,OutputFormat.createPrettyPrint());
//			xmlWriter.write(document);
//			xmlWriter.close();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
		return "success";
	}

上面注释都很详细了,这里就不多说明。下面前台访问action的代码也贴出来如下:
//获取浏览器的类型
var explorerType = "";  
if(navigator.userAgent.indexOf("MSIE")>0){
    explorerType="IE";
}  
if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){
    explorerType="Firefox";
}  
location.href = 'exportWorkflowXml.action?returnFlowId='+record.wwmWorkflowId+'&explorerType='+explorerType;

参考解决方法如下:http://article.pchome.net/content-325592.html

链接地址:http://kevin12.iteye.com/blog/1947631
分享到:
评论

相关推荐

    Struts2下载文件中文乱码处理

    ### Struts2下载文件中文乱码处理 在Web开发中,使用Struts2框架进行文件下载操作时,经常遇到的一个问题是文件名中的中文字符显示为乱码。这主要是因为浏览器和服务器之间的编码不一致所导致的。为了确保用户能够...

    struts2上传下载 解决中文文件名乱码

    通过上述实践和调试,我们已经成功解决了Struts2框架下中文文件名上传和下载的乱码问题。在遇到类似问题时,可以按照这些步骤进行排查和修复。记住,关键在于正确配置Struts2的拦截器、请求编码以及在处理文件名时...

    struts2.2.1文件下载及中文乱码问题解决.pdf

    filename="struts2.txt"`表示下载文件时,保存的文件名为`struts2.txt`。 在Struts2中,使用`Result`类型为`stream`的配置来实现文件下载。在`struts.xml`中,你需要定义一个`action`,并指定一个返回`InputStream`...

    Struts2乱码终极解决办法

    ### Struts2乱码终极解决办法 #### 一、引言 在开发基于Struts2框架的应用时,经常遇到的一个问题就是中文乱码。这不仅影响用户体验,还可能导致数据处理错误。本文将详细介绍如何彻底解决Struts2中的乱码问题,并...

    解决struts2.1.6+spring+hibernate 中文乱码

    在Struts2项目中,可以通过修改`struts.properties`文件来指定项目的字符编码方式,从而解决中文乱码问题。具体配置如下: ```properties struts.objectFactory = spring struts.i18n.reload=true #struts.locale=...

    Struts2中实现文件下载(修正中文问题).pdf

    本篇文章将详细介绍如何在Struts2中实现文件下载,并解决中文文件名的编码问题。 首先,我们需要在`struts.xml`配置文件中定义一个Action,这个Action将会处理文件下载的请求。例如,我们可以创建一个名为`...

    Struts 2中实现文件下载

    以下将详细介绍如何在Struts 2中实现文件下载,特别是处理中文文件名的问题。 首先,你需要创建一个Action类,例如`FileDownloadAction`,这个类需要包含一个方法来提供文件的输入流。通常,你会有一个属性如`...

    Struts中文乱码解决方案

    这里我们将详细探讨如何解决 Struts 中的中文乱码问题。 一、在 Action 类中的解决方法: 当在 Action 类中遇到中文乱码问题时,可以使用以下代码进行转换。创建一个静态工具类,如 `Chinese`,并定义一个 `...

    struts与hibernate实现文件的上传与动态下载

    2. **处理中文文件名**:为了解决中文文件名的乱码问题,可以生成一个基于时间戳的唯一文件名,例如在`getNumberFileName()`方法中。 3. **下载代码**:在Action中,创建一个输入流读取文件,然后通过Servlet的`...

    struts2获取参数,解决乱码,跳转

    在这个主题中,我们将深入探讨Struts2如何获取参数、解决乱码问题以及实现页面跳转。 首先,让我们来看看Struts2如何获取HTTP请求中的参数。在Struts2中,我们可以使用Action类来接收和处理请求参数。Action类是...

    struts下的汉字乱码问题

    总结来说,解决Struts下的汉字乱码问题,需要从页面、过滤器、服务器配置和Struts核心Servlet等多方面进行设置,确保在整个请求生命周期中,中文字符始终以正确的编码进行处理。这不仅涉及了前端的展示,还涉及到...

    Struts上传,已经处理好乱码问题

    首先,我们需要了解Struts文件上传的基本原理。在Struts中,文件上传是通过`Commons FileUpload`库来实现的,它是Apache Commons项目的一部分,专门处理HTTP请求中的多部分数据,包括文件上传。在Struts的ActionForm...

    struts文件

    - **解决表单提交中文乱码问题**:通过配置相关的常量来自动解决表单提交数据中的中文乱码问题。 - 例如,设置字符编码常量`struts.i18n.encoding=UTF-8`。 通过以上详细介绍,我们可以看出Struts2框架是一个功能...

    struts2.1.6解决乱码 补充

    ### Struts2.1.6解决乱码问题详解 在Web开发中,字符编码问题一直是个头疼的问题,尤其是在处理中文等多字节字符时。Struts2作为一个流行的Java Web框架,同样面临着这样的挑战。本文将深入探讨如何在Struts2.1.6...

    struts2配置文件详细说明

    Struts2的配置通常存储在一个名为`struts.xml`的XML文件中。这个文件遵循特定的DTD(文档类型定义),如`struts-2.0.dtd`,确保其结构的正确性。 2. **常量配置**: `&lt;constant&gt;`元素用于定义配置文件中的全局...

    struts2如何生成XML文件

    ### Struts2生成XML文件详解 #### 一、引言 在Web开发中,XML(可扩展标记语言)是一种常用的数据交换格式。Struts2框架作为Java Web开发中的一种流行框架,提供了丰富的功能来处理XML数据。本文将详细介绍如何...

    解决Struts中ApplicationResources.properties文件不支持中文问题

    解决 Struts 中 ApplicationResources.properties 文件不支持中文问题 Struts 框架中,ApplicationResources.properties 文件是用于存储应用程序的资源文件,如按钮文字、菜单项、提示信息等。然而,默认情况下,...

    使用struts2.0上传文件,完全解决了中文乱码问题

    使用struts2.0上传文件,完全解决了中文乱码问题。运行项目前请先在D盘建立个名tmp的文件夹,实例上传的文件将保存在tmp文件夹中。文件大小限制为15M,该示例蛮完整的,有些架包忘删了导致项目有点大。

    struts1的文件上传

    本文将深入探讨Struts1中的文件上传,包括单文件上传、多文件上传,以及解决文件名乱码和重名冲突等问题。 1. **文件上传基础** 文件上传是Web应用中常见的一种功能,允许用户从本地电脑上传文件到服务器。在...

Global site tag (gtag.js) - Google Analytics