`

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

阅读更多

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

 

================================

©Copyright 蕃薯耀 2018年6月26日

http://fanshuyao.iteye.com/

 

	
public String getRealPath(HttpServletRequest request){
	return request.getSession().getServletContext().getRealPath("/");
}
	
/**
 * 通用文件下载方法
 * @param request HttpServletRequest
 * @param response HttpServletResponse
 * @param absoluteFilePath String 文件的绝对路径,如:c:/a/a.txt
 * @param fileDownloadName String 自定义文件下载显示的名称
 * @param isDeleteAfterDownload boolean 用户下载文件后是否删除服务器的源文件,true删除,其它否
*/
public void downloadFile(HttpServletRequest request, HttpServletResponse response, 
		String absoluteFilePath, String fileDownloadName, boolean isDeleteAfterDownload){
	InputStream is = null;
	OutputStream os = null;
	File file = null;
	try{
		logger.info("开始时间:"+System.currentTimeMillis());
		
		
		file = new File(absoluteFilePath);
		if(!file.exists()){
			throw new RuntimeException("文件不存在:"+file.getAbsolutePath());
		}
		is = new BufferedInputStream(new FileInputStream(file));
		
		String suffix = absoluteFilePath.substring(absoluteFilePath.lastIndexOf("."));
		if(".xls".equalsIgnoreCase(suffix) || ".xlsx".equalsIgnoreCase(suffix)){
			response.setContentType("application/vnd.ms-excel");
		}else if(".doc".equalsIgnoreCase(suffix) || ".docx".equalsIgnoreCase(suffix)){
			response.setContentType("application/vnd.msword");
		}else if(".exe".equalsIgnoreCase(suffix)){
			response.setContentType("application/octet-stream");
		}else if(".jpe".equalsIgnoreCase(suffix) || ".jpeg".equalsIgnoreCase(suffix) || ".jpg".equalsIgnoreCase(suffix)){
			response.setContentType("image/jpeg");
		}else if(".png".equalsIgnoreCase(suffix)){
			response.setContentType("image/png");
		}else if(".gif".equalsIgnoreCase(suffix)){
			response.setContentType("image/gif");
		}else if(".mp3".equalsIgnoreCase(suffix)){
			response.setContentType("audio/x-mpeg");
		}else if(".mp4".equalsIgnoreCase(suffix) || ".mpg4".equalsIgnoreCase(suffix)){
			response.setContentType("video/mp4");
		}else if(".wm".equalsIgnoreCase(suffix)){
			response.setContentType("video/x-ms-wm");
		}else if(".wmv".equalsIgnoreCase(suffix)){
			response.setContentType("audio/x-ms-wmv");
		}else if(".rm".equalsIgnoreCase(suffix) || ".rmvb".equalsIgnoreCase(suffix)){
			response.setContentType("audio/x-pn-realaudio");
		}else if(".xml".equalsIgnoreCase(suffix)){
			response.setContentType("text/xml");
		}else if(".gz".equalsIgnoreCase(suffix)){
			response.setContentType("application/x-gzip");
		}else if(".gtar".equalsIgnoreCase(suffix)){
			response.setContentType("application/x-gtar");
		}else if(".tar".equalsIgnoreCase(suffix) || ".taz".equalsIgnoreCase(suffix)){
			response.setContentType("application/x-tar");
		}else if(".rar".equalsIgnoreCase(suffix)){
			response.setContentType("application/x-rar-compressed");
		}else if(".zip".equalsIgnoreCase(suffix)){
			response.setContentType("application/zip");
		}else{
			response.setContentType("multipart/form-data");
		}
		
		//处理自定义文件名,如果没有自定义文件名,使用原来的文件名进行下载
		if(StringUtils.isBlank(fileDownloadName)){//org.apache.commons.lang.StringUtils
			fileDownloadName = file.getName().substring(file.getName().lastIndexOf("."));
		}else{
			if(fileDownloadName.indexOf(".") > -1){
				fileDownloadName = fileDownloadName.substring(fileDownloadName.lastIndexOf("."));
			}
		}
		
		//文件名编码,解决中文乱码问题
		String userAgent = request.getHeader("User-Agent").toLowerCase();
		if(userAgent.contains("msie") 
				|| userAgent.contains("trident") 
				|| userAgent.contains("like gecko")
				|| userAgent.contains("edge")){//IE浏览器
			
			fileDownloadName = URLEncoder.encode(fileDownloadName, "UTF-8");
			fileDownloadName = fileDownloadName.replaceAll("\\+", "%20");//处理文件名多余的加号(+)
		}else{//其它浏览器
			fileDownloadName = new String(fileDownloadName.getBytes("UTF-8"), "ISO-8859-1");
		}
		
		response.setCharacterEncoding("UTF-8");
		response.addHeader("Content-Disposition", "attachment;filename=\"" + fileDownloadName + suffix + "\"");
		response.addHeader("Content-Length", "" + file.length());
		
		os = response.getOutputStream();
		
		byte[] buffer = new byte[1024];
		int length = 0;
		while((length = is.read(buffer)) > 0){
			os.write(buffer, 0, length);
		}
		logger.info("结束时间:"+System.currentTimeMillis());
	}catch(Exception e){
		e.printStackTrace();
		logger.info("下载文件出错:"+e.getCause());
	}finally{
		try {
			if(os != null){
				//os.flush();
				os.close();
			}
			if(is != null){
				is.close();
			}
			if(isDeleteAfterDownload){
				if(file != null){
					//org.apache.commons.io.FileUtils
					FileUtils.deleteQuietly(file);
				}
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}
	

 

使用方法例子:

public void downloadExcelFileForPlaceNameQuery(HttpServletRequest request, HttpServletResponse response){
		try {
			Row row = parseRequestParametersToRow(request);
			Properties  prop = PropertiesUtils.read("placeName.properties");
			String destDir = prop.getProperty("destDirForPlaceNameQuery");
			String absoluteFilePath = destDir + row.getString("destFileName");
			DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
			String nowString = format.format(new Date());
			this.downloadFile(request, response, absoluteFilePath, "地名管理综合查询-" + nowString, true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void downloadFileCommon(HttpServletRequest request, HttpServletResponse response){
		try {
			Row row = parseRequestParametersToRow(request);
			this.downloadFile(request, response, row.getString("absoluteFilePath"), row.getString("fileDownloadName"), true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

 

Java通用文件上传:

http://fanshuyao.iteye.com/blog/2431007

 

(如果你觉得文章对你有帮助,欢迎捐赠,^_^,谢谢!) 


    

 

================================

©Copyright 蕃薯耀 2018年6月26日

http://fanshuyao.iteye.com/

2
0
分享到:
评论
1 楼 蕃薯耀 2018-06-26  
Java文件下载,Java文件下载中文乱码,Java通用文件下载


=========
蕃薯耀

相关推荐

    java读取文件中文乱码

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

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

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

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

    在Java编程中,读取和写入TXT文件时,经常遇到中文乱码的问题。这是因为Java默认的字符编码可能与TXT文件的实际编码不一致,导致字符无法正确解析。本篇文章将深入探讨这个问题,并提供完整的源码解决方案。 首先,...

    Java乱码学习 Java乱码学习

    Java 乱码问题一直是开发...总结来说,Java乱码问题需要从源头(文件编码)、编译过程、网络传输以及服务器处理等多个层面进行排查和设置。了解并掌握这些知识点,将有助于我们更好地预防和解决Java环境下的乱码问题。

    java解决压缩中文乱码

    在Java编程中,当涉及到文件压缩操作时,经常会遇到一个问题:中文字符在压缩过程中出现乱码。这主要是因为Java的标准库`java.util.zip`在处理非ASCII编码的字符时存在局限性。不过,通过一些技巧和自定义实现,我们...

    java获取乱码问题

    本文将详细介绍如何通过修改`server.xml`配置文件来解决Java应用中出现的乱码问题,并对涉及到的相关知识点进行深入探讨。 #### 一、乱码问题背景 在Java Web开发中,客户端通过HTTP协议发送请求到服务器端,而...

    java中文乱码问题

    在Java编程中,中文乱码问题是一个常见的困扰,尤其是在处理文件读写、网络传输或数据库交互等场景。这里,我们将深入探讨这个问题的原因、解决方法以及相关的编码理论。 首先,我们需要理解编码的基础知识。计算机...

    下载文件乱码问题(附带下载源码)

    解决下载文件乱码问题的关键在于: - 正确设置HTTP响应头,包括Content-Type和字符编码。 - 在读取和写入文件时保持一致的编码。 - 对于多语言环境,考虑使用Unicode(如UTF-8)作为通用编码,以兼容各种语言的字符...

    java中文乱码的解决方法

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

    java导出文件文件名处理

    本文将详细介绍如何在Java中处理导出文件时的文件名问题,确保用户能够正常下载带有中文或其他特殊字符的文件名。 #### 知识点一:理解文件名编码问题 在Web应用中,当服务器向客户端发送文件时,HTTP协议中会包含...

    如何使用Java代码获取播放文件的时长

    在Java编程环境中,获取播放文件(如音频或视频文件)的时长是一项常见的任务,尤其在多媒体处理或者媒体播放器的开发中。本教程将详细讲解如何使用Java代码来实现这一功能,支持的文件格式包括mp3、mp4、f4v、3gp、...

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

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

    java 支持中文解压:一行代码解决 java.util.zip.ZipInputStream 中文乱码;--文件处理通用类

    1、文件解压zip通用机制方法、一行代码支持中文; 2、一行代码解决 java.util.zip.ZipInputStream 中文乱码; 3、删除指定路径内的所有文件通用机制方法;

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

    通过以上方法,我们可以确保Java程序在处理包含中文的TXT文件时正确地读取和写入,避免出现乱码。在实际项目中,良好的编码习惯和对编码的理解能有效预防这类问题的发生,提高代码的可维护性和兼容性。

    java文件编码转换

    例如,一个使用GBK编码的Java文件在UTF-8环境下打开,由于解码方式不匹配,原本的中文字符就会显示为乱码。 针对这种情况,Java提供了一些API来进行文件编码的转换。我们可以使用`java.nio.charset`包中的类,如`...

    java PDF 中文 乱码 SIMYOU

    本主题聚焦于"java PDF 中文 乱码 SIMYOU",将详细阐述如何在Java中生成包含中文的PDF文件并避免乱码。 首先,我们需要理解Java处理字符编码的基本概念。Java使用Unicode作为其内部字符集,这意味着它可以很好地...

    java 生成PDF文件

    PDF(Portable Document Format)是一种通用的文件格式,它能够保持文档的原始布局和样式,方便跨平台查看和打印。本篇文章将深入探讨如何在Java中生成PDF文件,主要涉及以下几个关键知识点: 1. **iText库**:...

    JAVA中文乱码内幕.rar

    7. 配置文件:Java应用中的配置文件(如properties文件)如果含有中文字符,且未指定编码,加载时可能出现乱码。解决办法是在文件头部添加一行表示编码的注释,如"# encoding=UTF-8"。 8. 字符集环境变量:系统环境...

Global site tag (gtag.js) - Google Analytics