1.页面js发送后台请求
window.location.href = basePath+"printWord/zipDownload?ids="+ ids + "&roadType=" + roadType+"&zqCode="+zqCode+"&zqName="+zqName;
2.后台controller接收参数,查询文件,组织文件下载输出流
@RequestMapping(value = "/zipDownload", produces = "text/html;charset=UTF-8")
public void zipDownload(HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
String zqCode = request.getParameter("zqCode"); //政区编码
String roadType = request.getParameter("roadType"); //路线类型
String ids = request.getParameter("ids"); //条目id
String zqName = request.getParameter("zqName"); //条目id
String fileTitle = "支撑文件";
if("H".equals(roadType)) {
fileTitle += "(高速公路)";
}else {
fileTitle += "(普通国省道)";
}
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
String nowDate = formatter.format(new Date());
fileTitle += "-"+zqName+"-"+nowDate+".zip";
printWordService.zipDownload(zqCode,roadType,ids,request,response,fileTitle);
} catch (Exception e) {
e.printStackTrace();
}
}
3.service层处理文件
(1)service后台
public void zipDownload(String zqCode, String roadType, String ids, HttpServletRequest request, HttpServletResponse response, String zipName) {
ZipOutputStream zipos = null;
DataOutputStream os = null;
InputStream is = null;
try {
response.reset();
zipName = new String(URLEncoder.encode(zipName, "UTF-8").getBytes(), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment;fileName=\"" + zipName + "\"");
response.setContentType("application/octet-stream; charset=UTF-8");
zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
zipos.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法
MinioClient minioClient = FileUtils.getInstance();
List<ScoreFile> fileList = getFileListByCondi(zqCode,roadType,ids);//通过条件查询到的文件数据
if(null != fileList && fileList.size() > 0) {
for(int i = 0;i < fileList.size();i++) {
ScoreFile scoreFile = fileList.get(i);
String packagePathName = scoreFile.getItemCode()+ File.separator + scoreFile.getFileName();
try {
zipos.putNextEntry(new ZipEntry(packagePathName));
os = new DataOutputStream(zipos);
is = minioClient.getObject(scoreFile.getFileDirectory(),
scoreFile.getFilePath() + scoreFile.getFileNewName());
byte[] b = new byte[100];
int length = 0;
while((length = is.read(b))!= -1){
os.write(b, 0, length);
}
} catch (IOException e) {
e.printStackTrace();
}
}
is.close();
os.flush();
os.close();
zipos.close();
System.out.println("下载完成-----------------");
}else {
System.out.println("查询不到下载文件-----------------");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (is != null) {
try {
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (zipos != null) {
try {
zipos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
(2) FileUtils工具类配置连接minio配置:
private static volatile MinioClient minioClient = null;
public static String minioUrl;
public static String minioUsername;
public static String minioPassword;
@Value("${system.minioUrl}")
private String minioUrlTmp;
@Value("${system.minioUsername}")
private String minioUsernameTmp;
@Value("${system.minioPassword}")
private String minioPasswordTmp;
@PostConstruct
public void init() throws Exception {
minioUrl = minioUrlTmp;
minioUsername = minioUsernameTmp;
minioPassword = minioPasswordTmp;
}
//初始化minio链接
public static MinioClient getInstance() {
if (minioClient == null) {
synchronized (FileUtils.class) {
if (minioClient == null) {
try {
//new FileUtils();
minioClient = new MinioClient(minioUrl,minioUsername,minioPassword);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
return minioClient;
}
(3)maven注入minio的jar包
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>3.0.12</version>
</dependency>