Java 文件下载工具类


Java 文件下载工具类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static Logger logger = LoggerFactory.getLogger(DownloadUtil.class);

文件下载方法

/**
 * 文件下载方法
 * @param response
 * @param filePath
 * @param encode
 */
public static void download(HttpServletResponse response, String filePath, String encode) {
	response.setContentType("text/html;charset=" + encode);
	BufferedInputStream bis = null;
	BufferedOutputStream bos = null;
	String downLoadPath = filePath;
	try {
		File file = new File(downLoadPath);
		long fileLength = file.length();
		String fileName = file.getName(); 
		response.setContentType("application/x-msdownload;");
		response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes(encode), "ISO8859-1"));
		response.setHeader("Content-Length", String.valueOf(fileLength));
		bis = new BufferedInputStream(new FileInputStream(downLoadPath));
		bos = new 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) {
		logger.error(e.getMessage());
	} finally {
		if (bis != null)
			try {
				bis.close();
			} catch (IOException e) {
				logger.error(e.getMessage());
			}
		if (bos != null)
			try {
				bos.close();
			} catch (IOException e) {
				logger.error(e.getMessage());
			}
	}
}

以流的方式下载

/**
 * 以流的方式下载
 * @param response
 * @param filePath
 * @param encode
 * @return response
 */
public static HttpServletResponse downloadStream(HttpServletResponse response, String filePath, String encode) {
	response.setContentType("text/html;charset=" + encode);
	try {
		// path是指欲下载的文件的路径
		File file = new File(filePath);
		// 取得文件名
		String filename = file.getName();
		// 取得文件的后缀名
		// String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
		// 以流的形式下载文件
		InputStream fis = new BufferedInputStream(new FileInputStream(filePath));
		byte[] buffer = new byte[fis.available()];
		fis.read(buffer);
		fis.close();
		// 清空response
		response.reset();
		// 设置response的Header
		response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes(encode), "ISO8859-1"));
		response.addHeader("Content-Length", "" + file.length());
		OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
		response.setContentType("application/octet-stream");
		toClient.write(buffer);
		toClient.flush();
		toClient.close();
	} catch (IOException ex) {
		logger.error(ex.getMessage());
	}
	return response;
}

下载本地文件

/**
 * 下载本地文件
 * @param response
 * @param filePath
 * @param encode
 */
public static void downloadLocal(HttpServletResponse response, String filePath,String encode) {
	response.setContentType("text/html;charset=" + encode);
	try {
		// 读到流中
		InputStream inStream = new FileInputStream(filePath); // 文件的存放路径
		// path是指欲下载的文件的路径
		File file = new File(filePath);
		// 取得文件名
		String fileName = file.getName();
		// 设置输出的格式
		response.reset();
		response.setContentType("bin");
		response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes(encode), "ISO8859-1") + "\"");
		// 循环取出流中的数据
		byte[] b = new byte[100];
		int len;
		while ((len = inStream.read(b)) > 0) {
			response.getOutputStream().write(b, 0, len);
		}
		inStream.close();
	} catch (IOException e) {
		logger.error(e.getMessage());
	}
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM