package com.zt.life.export.service;
|
|
import com.deepoove.poi.XWPFTemplate;
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
import org.apache.poi.xwpf.usermodel.XWPFDocument;
|
import sun.misc.BASE64Encoder;
|
|
import javax.servlet.ServletOutputStream;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.*;
|
import java.net.URLEncoder;
|
|
public class DownloadService {
|
|
/**
|
* 导出Excel模板
|
*
|
* @param response
|
* @param fullPath
|
* @param fileName
|
*/
|
public static void download(HttpServletResponse response, String fullPath, String fileName) {
|
response.setContentType("text/html;charset=UTF-8");
|
|
BufferedInputStream bis = null;
|
BufferedOutputStream bos = null;
|
String contentType = "application/octet-stream";
|
try {
|
response.setContentType(contentType);
|
response.setHeader("Content-disposition",
|
"attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
|
byte[] buff = new byte[2048];
|
bis = new BufferedInputStream(new FileInputStream(fullPath));
|
bos = new BufferedOutputStream(response.getOutputStream());
|
int bytesRead;
|
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
|
bos.write(buff, 0, bytesRead);
|
}
|
} catch (IOException e) {
|
} finally {
|
try {
|
if (bis != null) {
|
bis.close();
|
}
|
if (bos != null) {
|
bos.close();
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
}
|
|
// public static void download(HttpServletResponse response, XWPFDocument
|
// document, String fileName) {
|
// response.setContentType("text/html;charset=UTF-8");
|
//
|
// String contentType = "application/octet-stream";
|
// try {
|
// response.setContentType(contentType);
|
// response.setHeader("Content-disposition",
|
// "attachment; filename=" + new String(fileName.getBytes("utf-8"),
|
// "ISO8859-1"));
|
// ServletOutputStream out = response.getOutputStream();
|
// document.write(out);
|
// out.flush();
|
// out.close();
|
// } catch (IOException e) {
|
// } finally {
|
// try {
|
// document.close();
|
// } catch (IOException e) {
|
// e.printStackTrace();
|
// }
|
// }
|
//
|
// }
|
|
public static void download(HttpServletRequest request, HttpServletResponse response, XWPFTemplate template,
|
String fileName) throws UnsupportedEncodingException {
|
|
// 处理ie浏览器 或 火狐浏览器 乱码问题
|
String fileNameEncoder = getNameEncoder(request, fileName);
|
|
response.setContentType("text/html;charset=UTF-8");
|
String contentType = "application/octet-stream";
|
try {
|
response.setContentType(contentType);
|
response.setHeader("Content-disposition", "attachment; filename=" + fileNameEncoder);
|
ServletOutputStream out = response.getOutputStream();
|
template.write(out);
|
out.flush();
|
out.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
} finally {
|
try {
|
template.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
}
|
|
public static void download(HttpServletRequest request, HttpServletResponse response, XWPFDocument document,
|
String fileName) throws UnsupportedEncodingException {
|
|
// 处理ie浏览器 或 火狐浏览器 乱码问题
|
String fileNameEncoder = getNameEncoder(request, fileName);
|
|
response.setContentType("text/html;charset=UTF-8");
|
String contentType = "application/octet-stream";
|
try {
|
response.setContentType(contentType);
|
response.setHeader("Content-disposition", "attachment; filename=" + fileNameEncoder);
|
ServletOutputStream out = response.getOutputStream();
|
document.write(out);
|
out.flush();
|
out.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
} finally {
|
try {
|
document.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
}
|
|
public static void downloadExecl(HttpServletResponse response, XSSFWorkbook template, String fileName) {
|
response.setContentType("text/html;charset=UTF-8");
|
|
String contentType = "application/octet-stream";
|
try {
|
response.setContentType(contentType);
|
response.setHeader("Content-disposition",
|
"attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
|
ServletOutputStream out = response.getOutputStream();
|
template.write(out);
|
out.flush();
|
out.close();
|
} catch (IOException e) {
|
} finally {
|
try {
|
template.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
}
|
|
/**
|
* 指定文件导出模板
|
* @param excelPath 模板路径
|
* @param excelName 导出模板名称
|
* @param response
|
* @param request
|
* @throws IOException
|
*/
|
public static void exportModelPath(String excelPath,String excelName,File file,HttpServletResponse response,HttpServletRequest request) throws IOException{
|
InputStream fis = new BufferedInputStream(new FileInputStream(excelPath));
|
int a = -1;
|
byte[] bytes = new byte[fis.available()];
|
int index = 0;
|
while ((a = fis.read()) > -1) {
|
bytes[index] = (byte) a;
|
index++;
|
}
|
response.reset(); //清空
|
response.setHeader("Content-Disposition", "attachment;filename=" + DownloadService.getNameEncoder(request, excelName));
|
response.addHeader("Content-Length", "" + file.length());
|
OutputStream ops = new BufferedOutputStream(response.getOutputStream());
|
response.setContentType("application/octet-stream");
|
ops.write(bytes);
|
fis.close();
|
ops.flush();
|
ops.close();
|
}
|
|
/**
|
* 处理ie浏览器 或 火狐浏览器 文件名乱码问题
|
*
|
* @param request
|
* @param fileName
|
* @return
|
* @throws UnsupportedEncodingException
|
*/
|
public static String getNameEncoder(HttpServletRequest request, String fileName)
|
throws UnsupportedEncodingException {
|
// 获得请求头中的User-Agent
|
String agent = request.getHeader("User-Agent");
|
// 根据不同浏览器进行不同的编码
|
String fileNameEncoder = "";
|
if (agent.contains("MSIE") || agent.contains("Trident")) {
|
// IE浏览器
|
fileNameEncoder = URLEncoder.encode(fileName, "utf-8");
|
fileNameEncoder = fileNameEncoder.replace("+", " ");
|
} else if (agent.contains("Firefox")) {
|
// 火狐浏览器
|
BASE64Encoder base64Encoder = new BASE64Encoder();
|
fileNameEncoder = "=?utf-8?B?" + base64Encoder.encode(fileName.getBytes("utf-8")) + "?=";
|
} else {
|
// 其它浏览器
|
fileNameEncoder = URLEncoder.encode(fileName, "utf-8");
|
}
|
return fileNameEncoder;
|
}
|
|
/**
|
* 导出Excel模板
|
*
|
* @param response
|
* @param fullPath
|
* @param fileName
|
*/
|
public static void downloadZip(HttpServletResponse response, HttpServletRequest request, String fullPath,
|
String fileName) {
|
|
BufferedInputStream bis = null;
|
BufferedOutputStream bos = null;
|
try {
|
// 处理ie浏览器 或 火狐浏览器 乱码问题
|
String fileNameEncoder = getNameEncoder(request, fileName);
|
response.setContentType("text/html;charset=UTF-8");
|
|
String contentType = "application/octet-stream";
|
response.setContentType(contentType);
|
response.setHeader("Content-disposition", "attachment; filename=" + fileNameEncoder);
|
byte[] buff = new byte[2048];
|
bis = new BufferedInputStream(new FileInputStream(fullPath));
|
bos = new BufferedOutputStream(response.getOutputStream());
|
int bytesRead;
|
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
|
bos.write(buff, 0, bytesRead);
|
}
|
} catch (IOException e) {
|
} finally {
|
try {
|
if (bis != null) {
|
bis.close();
|
}
|
if (bos != null) {
|
bos.close();
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
}
|
}
|