标题通过DB中的主键,查出所关联的所有文件,下载压缩成zip文件
调用
public void downImgFile(HttpServletResponse response, @RequestParam(required = false) Integer did) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
String strDate = "";
String fileName = "";
List<CuFileDetail> list = governmentAfairsService.ListDownData(did);
List<String> urlList = new ArrayList<String>();
if(list.size()==0){
fileName = "未上传任何资料";//没有资料 给一个默认的文件名
}
logger.debug("检索图片资源:"+list.get(0).getDocurl());
for (int i = 0; i < list.size(); i++) {
fileName = list.get(0).getDoctitle();
strDate = formatter.format(list.get(0).getCreatetime());
urlList.add(resourcesUtil.getResourceUrlInside(list.get(i).getDocurl()));
logger.debug("生成图片资源:"+urlList.get(urlList.size()-1));
}
try {
//控制文件名编码
String filename = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(bos);
UrlFilesToZipUtil uzu = new UrlFilesToZipUtil();
int idx = 1;
for (String oneFile : urlList) {
String str = oneFile.substring(oneFile.lastIndexOf("."));
zos.putNextEntry(new ZipEntry(idx+str));
byte[] bytes = uzu.getImageFromURL(oneFile);
zos.write(bytes, 0, bytes.length);
zos.closeEntry();
idx++;
}
zos.close();
//设置强制下载不打开
response.setContentType("application/force-download");
//设置文件名
response.addHeader("Content-Disposition", "attachment;fileName=" + filename + strDate+".zip");
OutputStream os = response.getOutputStream();
os.write(bos.toByteArray());
os.close();
} catch (FileNotFoundException ex) {
logger.error("FileNotFoundException", ex);
} catch (Exception ex) {
logger.error("Exception", ex);
}
}
UrlFilesToZipUtil.java 文件 工具类
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** * @author XiaoJunXiang * 根据文件路径下载文件压缩Zip */
public class UrlFilesToZipUtil {
private static final Logger logger = LoggerFactory.getLogger(UrlFilesToZipUtil.class);
// 根据文件链接把文件下载下来并且转成字节码
public byte[] getImageFromURL(String urlPath) {
logger.error("正在读取图片="+urlPath);
byte[] data = null;
InputStream is = null;
HttpURLConnection conn = null;
try {
URL url = new URL(urlPath);
conn = (HttpURLConnection)url.openConnection();
conn.setDoInput(true);
conn.setRequestMethod("GET");
conn.setConnectTimeout(10000);
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);
}
}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;
}
}