//导出
@RequestMapping(value = "export")
public void export(OaCircular oaCircular,HttpServletResponse response,HttpServletRequest request,String notifyPermission){
//得到所有的通告(每条通告中包含一张缩略图和若干个附件)
List<OaCircular> oaCirculars = Lists.newArrayList();
Page<OaCircular> page = oaCircularService.findMyselfPublishNotify(new Page<OaCircular>(request, response),oaCircular);
for (OaCircular oaCircular2 : page.getList()) {
oaCirculars.add(oaCircularService.findMyselfPublishNotifyById(oaCircular2));
}
oaCircular.setType("4");
page = oaCircularService.findMyselfPublishNotify(new Page<OaCircular>(request, response),oaCircular);
for (OaCircular oaCircular2 : page.getList()) {
oaCirculars.add(oaCircularService.findMyselfPublishNotifyById(oaCircular2));
}
String tmpDir1 = System.getProperty("java.io.tmpdir")+"\\我发布的所有通告"+".xlsx"; //临时目录tomcat7x64\temp
//导出通告excel文件至临时目录
try {
new ExportExcel("我发布的所有通告", OaCircular.class).setDataList(oaCirculars).write(new FileOutputStream(new File(tmpDir1))).dispose();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ZipOutputStream zipOutputStream;
try {
String fileName = "我发布的所有通告(附件以及缩略图)"+".zip";
String agent = request.getHeader("User-Agent");
if(agent.contains("Firefox")){
fileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
response.setContentType("application/x-zip-compressed");
}else{
fileName = URLEncoder.encode(fileName,"UTF-8");
response.setContentType("application/x-zip-compressed;charset=utf-8");
}
response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName));
//添加所有通告excel临时文件至压缩包
zipOutputStream = new ZipOutputStream(response.getOutputStream());
ZipEntry zipEntry = new ZipEntry(new File(tmpDir1).getName());
InputStream input = null;
byte[] b = new byte[1024];
int len = 0;
if (new File(tmpDir1).exists()) {
input = new FileInputStream(new File(tmpDir1));
zipOutputStream.putNextEntry(zipEntry);
while ((len = input.read(b)) != -1) {
zipOutputStream.write(b,0,len);
}
input.close();
}
List<String> names = Lists.newArrayList();
Map<String, Integer> counts = Maps.newHashMap();
for (OaCircular oaCircular2 : oaCirculars) {
if (StringUtils.isNotBlank(oaCircular2.getAccessory())) {
//如果有重复标题修改文件目录名称,增加区分标识(1)(2)(3)以此类推
if (names.contains(oaCircular2.getName())) {
counts.put(oaCircular2.getName(),counts.get(oaCircular2.getName())+1);
}else{
names.add(oaCircular2.getName());
counts.put(oaCircular2.getName(),0);
}
//添加通告附件至压缩包
String[] accessorys = oaCircular2.getAccessory().substring(1).split("\\|");
for (String string : accessorys) {
String s = URLDecoder.decode(string,"UTF-8");
if (names.contains(oaCircular2.getName()) && counts.get(oaCircular2.getName()) > 0) {
zipEntry = new ZipEntry(oaCircular2.getName()+"("+counts.get(oaCircular2.getName())+")/附件/"+new File(s).getName());
}else{
zipEntry = new ZipEntry(oaCircular2.getName()+"/附件/"+new File(s).getName());
}
input = getInputStream(s,request);
if (input != null) {
zipOutputStream.putNextEntry(zipEntry);
b = new byte[1024];
len = 0;
while ((len = input.read(b)) != -1) {
zipOutputStream.write(b,0,len);
}
input.close();
}
}
}
if (StringUtils.isNotBlank(oaCircular2.getThumbnail())) {
//添加通告缩略图至压缩包
String s = URLDecoder.decode(oaCircular2.getThumbnail(),"UTF-8");
if (names.contains(oaCircular2.getName()) && counts.get(oaCircular2.getName()) > 0) {
zipEntry = new ZipEntry(oaCircular2.getName()+"("+counts.get(oaCircular2.getName())+")/缩略图/"+new File(s).getName());
}else{
zipEntry = new ZipEntry(oaCircular2.getName()+"/缩略图/"+new File(s).getName());
}
input = getInputStream(s,request);
if (input != null) {
zipOutputStream.putNextEntry(zipEntry);
b = new byte[1024];
len = 0;
while ((len = input.read(b)) != -1) {
zipOutputStream.write(b,0,len);
}
input.close();
}
}
}
zipOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//从服务器获得一个文件输入流
public static InputStream getInputStream(String urlPath, HttpServletRequest request) {
InputStream inputStream = null;
String path = Global.getUserfilesBaseDir();//得到服务器的项目路径
path = path.substring(0,path.lastIndexOf("\\"));
path = path.substring(0,path.lastIndexOf("\\"));
File file = new File(path+urlPath);
try {
if (file.exists()) {
inputStream = new FileInputStream(file);
}
} catch (IOException e) {
e.printStackTrace();
}
return inputStream;
}