`
dulinanaaa
  • 浏览: 14975 次
文章分类
社区版块
存档分类
最新评论

java通用格式下载,中文乱码解决

 
阅读更多

从网上看到了好多关于文件下载的问题,我之前也遇到过。比如在ff/chrome/360都好用,但在ie下乱码。或者中文转码后中文部门丢失等。今天整理下文件下载的问题,亲测ie,ff,chrome,360都能显示中文名,并且支持图片、office等通用文件的下载,下面附上代码

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import javax.activation.MimetypesFileTypeMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import sun.misc.BASE64Encoder;

public static void downloadFile(String filename, String filePath,
			HttpServletRequest request, HttpServletResponse response) {
		try {
	        // 1.得到下载文件的名称.必须处理乱码.
	        filename = new String(filename.getBytes("iso8859-1"), "utf-8");
	        
	        // 2.从upload目录下查找filename文件是否存在。
	        File file = new File(filePath);
	        
	        // 下载设置
	        // 1.设置mimetype类型
	        
	        String mimeType = new MimetypesFileTypeMap().getContentType(file);
	        response.setContentType(mimeType); // 根据文件名获取这种文件的mimeType值,设置到http响应头中。
	        
	        // 以下代码解决了浏览器显示下载文件名乱码问题
	        String agent = request.getHeader("User-agent");
	        String viewfilename = null;
	        if (agent.contains("MSIE")) {
	        	// IE浏览器
	        	viewfilename = URLEncoder.encode(filename, "utf-8");

	        } else if (agent.contains("Firefox")) {
	        	// 火狐浏览器
	        	BASE64Encoder base64Encoder = new BASE64Encoder();
	        	viewfilename = "=?utf-8?B?"
	        			+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
	        } else if (agent.contains("Chrome")) {
	        	// google浏览器
	        	viewfilename = URLEncoder.encode(filename, "utf-8");
	        } else {
	        	// 其它浏览器
	        	viewfilename = URLEncoder.encode(filename, "utf-8");
	        }
	        
	        // 2.设置响应头 Content-Dispositon.
	        response.setHeader("Content-Disposition", "attachment;filename="
	        		+ viewfilename);

	        if (file.exists()) {
	        	// 存在
	        	// 3.通过输入流将这个文件内容读取出来,通过response获取输出流,写回到浏览器.
	        	FileInputStream fis = new FileInputStream(file);

	        	OutputStream os = response.getOutputStream();

	        	int len = -1;
	        	byte[] b = new byte[1024];

	        	while ((len = fis.read(b)) != -1) {
	        		os.write(b, 0, len);
	        		os.flush();
	        	}
	        	try {
	                fis.close();
	                os.close();
	            }
	            catch (IOException e1) {
	                e1.printStackTrace();
	            }

	        } else {
	        	// 不存在
	        	throw new RuntimeException("下载资源不存在");
	        }
        }
        catch (UnsupportedEncodingException e) {
        	e.printStackTrace();
        	throw new RuntimeException("下载资源名称转码异常");
        }
        catch (FileNotFoundException e) {
	        e.printStackTrace();
	        throw new RuntimeException("下载资源不存在");
        }
        catch (IOException e) {
	        e.printStackTrace();
	        throw new RuntimeException("下载资源流异常");
        }
        
	}






分享到:
评论

相关推荐

    Java文件下载,Java文件下载中文乱码,Java通用文件下载

    本文将深入探讨Java文件下载的实现方式以及如何解决中文乱码问题。 首先,我们需要理解HTTP协议中的Content-Disposition头的作用,它用于告知浏览器如何处理响应体的内容,比如作为附件下载。在Java中,我们通常...

    彻底解决JAVA读取写入 TXT中文乱码问题 源码

    要解决Java读取TXT文件中文乱码的问题,关键在于指定正确的编码方式。以下是使用`BufferedReader`和`FileReader`读取UTF-8编码的TXT文件的示例: ```java import java.io.BufferedReader; import java.io....

    java解决压缩中文乱码

    以下将详细阐述如何解决Java压缩中文乱码问题。 首先,我们要理解为什么会出现乱码。在Java中,`java.util.zip`类库使用的是默认的平台字符集,而不是通用的Unicode(UTF-8)编码。因此,如果源文件包含中文字符且...

    java中文乱码的解决方法

    ### Java中文乱码的解决方法 #### 方法一:与Spring集成解决中文乱码问题 针对与Spring框架集成的应用,可以通过在`web.xml`文件中进行相应的配置来解决中文乱码问题。具体步骤如下: 1. **修改Web配置文件**: ...

    java读写文件避免中文乱码.docx

    Java 读写文件避免中文乱码 Java 语言在读写文件时,经常会 gặp到中文乱码的问题。这是因为 Java 默认使用的字符编码是 ISO-8859-1,而中文字符在这个编码中无法正确地表示。为了避免中文乱码,需要使用正确的...

    java读取文件中文乱码

    在Java编程中,读取包含中文字符的文件时可能会遇到乱码问题,这通常是由于编码格式不匹配导致的。要解决这个问题,我们需要理解文件的原始编码格式,并在Java代码中正确地设置字符集。以下是一些相关的知识点: 1....

    SupplyunittableUtil.java(中文乱码解决之道)

    `SupplyunittableUtil.java` 这个文件名暗示了这是一个Java工具类,专门用于处理“供应单位表”(可能是一个数据库表格或数据结构)的业务逻辑,并且这个类可能包含了针对中文乱码问题的解决方案。 中文乱码问题...

    java获取乱码问题

    ### Java获取乱码问题解析与解决方案 在Java应用开发过程中,字符编码问题一直是困扰开发者的一大难题,尤其是在处理HTTP请求中的中文或特殊字符时,经常会出现乱码现象。本文将详细介绍如何通过修改`server.xml`...

    java中文乱码问题

    解决Java中文乱码问题的核心在于:确保每个环节的编码一致,从源代码到最终显示的所有过程都应采用相同的字符编码标准。在实践中,推荐使用UTF-8编码,因为它具有广泛的支持和兼容性。 在实际项目中,当遇到乱码...

    彻底解决JAVA读取写入中文乱码的问题

    在Java编程中,读取和写入中文字符时经常遇到乱码问题,这主要是由于编码格式不匹配导致的。本文将深入探讨这个问题,并提供一种彻底解决JAVA读取写入TXT中文乱码问题的方法。 首先,我们需要理解编码的本质。在...

    Java乱码学习 Java乱码学习

    解决JSP乱码的通用策略如下: 1. 确保JSP文件本身无乱码,保存时使用正确的编码。 2. 对于POST请求,服务器端应使用过滤器或`request.setCharacterEncoding()`设置解码方式。 3. 对于GET请求,可以使用`URLEncoder....

    Java乱码解决方案

    在Java Web开发中,乱码问题常常困扰着开发者,尤其是对于处理中文字符时。这个问题涉及到字符编码的理解、HTTP协议的处理以及Java编程语言中的字符集设置。以下是一些关于Java乱码解决方案的关键知识点: 1. **...

    Struts实现文件下载中文乱码解决方案

    在处理文件下载时,可能会遇到中文文件名乱码的问题,这主要是由于字符编码不一致导致的。以下是对这个问题的详细分析及解决方案: 首先,问题出现在文件列表的展示和下载链接的生成过程中。在Action中,`request....

    Java Web编程中页面跳转乱码问题的解决方案.pdf

    Java Web编程页面跳转乱码问题的解决方案 Java Web编程是互联网开发领域中应用十分广泛的工具。然而,在实际开发过程中,程序员常常会遇到页面跳转乱码的问题,尤其是中文乱码问题,这些问题不仅消耗程序员大量的...

    Struts中文乱码解决方案

    对于用户提交的含有汉字的请求数据导致的乱码,可以通过自定义 RequestProcessor 来解决。首先,创建一个新的类 `SelfRequestProcessor` 继承自 Struts 内置的 `RequestProcessor` 类: ```java public class ...

    JavaWeb开发技术-解决中文输出乱码问题.pptx

    JavaWeb开发技术-解决中文输出乱码问题 JavaWeb开发技术是指使用Java语言开发Web应用程序的技术,涵盖了从基本的Servlet和JSP到高级的框架和架构模式的各种技术。其中,解决中文输出乱码问题是JavaWeb开发中一个...

    Java解决Itext pdf中文不显示问题

    下面将详细介绍如何解决Java中Itext PDF中文不显示的问题。 首先,我们需要理解PDF文档的编码机制。PDF文档默认使用的是Adobe的标准字体,如Helvetica或Times Roman,这些字体并不包含中文字符集。因此,当尝试在...

    几种常用解决jsp中文乱码的方案

    charset=gb2312" language="java" %>`,规定了 JSP 按其后指定的中文字符集 gb2312 编码输出到页面(gb2312 改为 GBK 也可以,前者是后者的一个子集,在本文的讨论中,可以不加区别地通用)。 二、表单传递过程中...

Global site tag (gtag.js) - Google Analytics