class="properties"> HOME_PATH=D\:\\soft\\Tomcat6\\virtualdir\\photo DOWNPHOTO_PATH=/photozip DOWN_TYPE_ZIP=/zip/
package com.jsict.httptransfer.comm; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import java.util.List; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream; import com.jsict.ictmap.common.PropertiesManager; import com.jsict.ictmap.web.UserSession; import com.jsict.ictmapmodule.custom.entiry.AttachmentBean; import com.jsict.util.StringUtil; /** * 打包下载图片 */ public class DownPhotoUtil { protected final Log logger = LogFactory.getLog(getClass()); public String zipPath = ""; //压缩路径 public String zipFile = ""; //压缩文件 public String downLoad = ""; //下载路径 /** * 下载图片 * @param userSession 用户session * @param list AttachmentBeanList * @param zipTitle zip名称 * @return * @throws Exception */ public String downPhoto(UserSession userSession,List list,String zipTitle) throws Exception{ String photoPath = PropertiesManager.getProperty("common.properties", "HOME_PATH"); createFile(userSession,photoPath); for (int i = 0; i < list.size(); i++) { AttachmentBean photo = (AttachmentBean) list.get(i); String path = photoPath + photo.getFilePath(); logger.info("=============path["+i+"]="+path); // 将文件拷贝到指定文件夹下 copyFileToLocal(path, zipPath + photo.getName()); } // 判断目录是否存在,不存在创建 logger.info("压缩包存放路径:" + zipPath + "\n"); String downPhotoPath = zipFile + "/" + zipTitle; //压缩文件路径 deleteFile(downPhotoPath); zip(zipPath, downPhotoPath); deleteFile(zipPath); return downLoad + "/" + zipTitle; } /** * 保存文件 * @param userSession 用户session * @param photoPath 图片绝对路径 * @throws IOException */ public void createFile(UserSession userSession,String photoPath) throws IOException{ String savePath = ""; //年月日 String saveDate=DateTools.parseDate2Str(new Date(), "yyyyMMdd"); savePath = savePath + "/" + saveDate; if(!StringUtil.isEmpty(userSession.getAreaId())){ //区码ID savePath = "/" + userSession.getAreaId(); } if (userSession.getIndependentDept() != null && !StringUtil.isEmpty(userSession.getIndependentDept().getDepartmentId())){ //企业ID if(!StringUtil.isEmpty(savePath)){ savePath = savePath + "/" + userSession.getIndependentDept().getDepartmentId(); } else { savePath = "/" + userSession.getIndependentDept().getDepartmentId(); } } if(userSession.getUserId() != null ){ savePath = savePath + "/" + userSession.getUserId(); } int ronNum = (int)(Math.random()*100000); savePath = savePath + "/" + ronNum; zipFile = photoPath + PropertiesManager.getProperty("common.properties", "DOWNPHOTO_PATH") +savePath; zipPath = zipFile +PropertiesManager.getProperty("common.properties", "DOWN_TYPE_ZIP"); downLoad = PropertiesManager.getProperty("common.properties", "DOWNPHOTO_PATH") +savePath; deleteFile(zipPath); // File file = new File(zipPath); if (!file.exists()) { file.mkdirs(); } } /** * * 方法说明:删除指定文件路径下的文件 * * @param targetPath * :目标文件路径 * @return 返回值类型 * @Exception 异常对象 * */ public static void deleteFile(String targetPath) throws IOException { File targetFile = new File(targetPath); if (targetFile.isDirectory()) { FileUtils.deleteDirectory(targetFile); } else if (targetFile.isFile()) { targetFile.delete(); } } /** * 把inputFileName下的文件压缩到zipFileName对应路径 * * @param inputFileName * 需压缩的文件(夹)路径 * @param zipFileName * 压缩后生成压缩文件名 * @throws Exception */ public static void zip(String inputFileName, String zipFileName) throws Exception { zip(zipFileName, new File(inputFileName)); } public static void zip(String zipFileName, File inputFile) throws Exception { ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName)); zip(out, inputFile, ""); out.close(); } public static void zip(ZipOutputStream out, File file, String base) throws Exception { if (file.isDirectory()) { File[] fl = file.listFiles(); out.putNextEntry(new ZipEntry(base + "/")); out.setEncoding("gbk"); base = base.length() == 0 ? "" : base + "/"; for (int i = 0; i < fl.length; i++) { zip(out, fl[i], base + fl[i].getName()); } } else { out.putNextEntry(new ZipEntry(base)); out.setEncoding("gbk"); FileInputStream in = new FileInputStream(file); int b; while ((b = in.read()) != -1) { out.write(b); } in.close(); } } /** * 将文件拷到clientPath指定文件夹下 * * @param url * 远程文件路径 * @param clientPath * 本地路径 * @return */ public static void copyFileToLocal(String fileFrom, String fileTo) { try { if(fileTo.contains("jpg")){ }else{ //有问题,暂时还原 fileTo=fileTo+".jpg"; } FileInputStream in = new FileInputStream(fileFrom); FileOutputStream out = new FileOutputStream(fileTo); byte[] bt = new byte[1024]; int count; while ((count = in.read(bt)) > 0) { out.write(bt, 0, count); } in.close(); out.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
public String downPhoto()throws Exception { List<AttachmentBean> list = null; String zipTitle = "photo.zip"; DownPhotoUtil dp= new DownPhotoUtil(); try { downPhotoPath = "图片下载失败"; if (list != null && list.size() > 0) { downPhotoPath = dp.downPhoto(this.getUserSession(), list, zipTitle); } logger.info("压缩包下载路径:" + downPhotoPath); } catch (Exception e) { downPhotoPath = "图片下载失败"; } return "downPhoto"; }