@RequestMapping(value = "/zip/{id}", method = RequestMethod.GET)
public String zipFiles(@PathVariable("id")String id,HttpServletResponse response) {
try {
String zipfileName = URLEncoder.encode("这里填压缩包名称.zip","UTF-8");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(bos);
//文件读取类,如果自己项目有就不用它也行
UrlFilesToZip s = new UrlFilesToZip();
//如果需要放多个文件就重复下面这四行,但是注意不能重名否则报错
zos.putNextEntry(new ZipEntry("这里填文件名.文件后缀"));
byte[] bytes = s.getImageFromURL("这里填获取文件的url");
zos.write(bytes, 0, bytes.length);
zos.closeEntry();
zos.close();
response.setContentType("application/force-download");// 设置强制下载不打开
response.addHeader("Content-Disposition","attachment;fileName=" + zipfileName);
OutputStream os = response.getOutputStream();
os.write(bos.toByteArray());
os.close();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
文件读取类
package com.xxx;//替换成你的包路径
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class UrlFilesToZip {
// private static final Logger logger = LoggerFactory.getLogger(UrlFilesToZip.class);
//根据文件链接把文件下载下来并且转成字节码
public byte[] getImageFromURL(String urlPath) {
byte[] data = null;
InputStream is = null;
HttpURLConnection conn = null;
try {
URL url = new URL(urlPath);
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
// conn.setDoOutput(true);
conn.setRequestMethod("GET");
conn.setConnectTimeout(6000);
is = conn.getInputStream();
if (conn.getResponseCode() == 200) {
data = readInputStream(is);
} else {
data = null;
}
} catch (MalformedURLException e) {
// logger.error("MalformedURLException", e);
} catch (IOException e) {
// logger.error("IOException", e);
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
// logger.error("IOException", e);
}
conn.disconnect();
}
return data;
}
public byte[] readInputStream(InputStream is) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length = -1;
try {
while ((length = is.read(buffer)) != -1) {
baos.write(buffer, 0, length);
}
baos.flush();
} catch (IOException e) {
// logger.error("IOException", e);
}
byte[] data = baos.toByteArray();
try {
is.close();
baos.close();
} catch (IOException e) {
// logger.error("IOException", e);
}
return data;
}
}