ssm框架 實現批量下載圖片並打包壓縮爲zip文件

jsp

<a class="btn btn-primary radius" href="worker/zipfileDownload_workerCard"><i class="Hui-iconfont">&#xe600;</i> 證件下載</a></span>

Controller.java 

/**
 *文件壓縮下載
 *billname:文件名
 *filename:文件存放路徑
 */
 @RequestMapping("/zipfileDownload_workerCard")
 public void zipfileDownload_workerCard(HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException, IOException{
		//響應頭的設置
		response.reset();
		response.setCharacterEncoding("utf-8");
		response.setContentType("multipart/form-data");
	   
		//設置壓縮包的名字
		 //解決不同瀏覽器壓縮包名字含有中文時亂碼的問題
		HttpSession session = request.getSession();
		
		String billname ="workerCard-"+session.getAttribute("projectWorktypeId");
		String downloadName = billname+".zip";
		//返回客戶端瀏覽器的版本號、類型
		String agent = request.getHeader("USER-AGENT");  
		try {
			//針對IE或者以IE爲內核的瀏覽器:  
			if (agent.contains("MSIE")||agent.contains("Trident")) {
				downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");
			} else {
				//非IE瀏覽器的處理:
				downloadName = new String(downloadName.getBytes("UTF-8"),"ISO-8859-1");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");

		//設置壓縮流:直接寫入response,實現邊壓縮邊下載
		ZipOutputStream zipos = null;
		try {
			zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
			zipos.setMethod(ZipOutputStream.DEFLATED); //設置壓縮方法 
		} catch (Exception e) {
			e.printStackTrace();
		}

		//循環將文件寫入壓縮流
		DataOutputStream os = null;
		Worker worker = new Worker();
		worker.setProjectWorktypeId((Integer)session.getAttribute("projectWorktypeId"));
	//從數據庫中取出要下載的圖片路徑、並循環寫入壓縮
		List<Worker> workerList = workerService.findAllWorkerByWhere(worker);
		for (Worker worker2 : workerList) {
			String filename =worker2.getWorkerScanFront();
			String removeStr = "/upload/workerCard";
			filename = filename.replace(removeStr, "");//去掉相對路徑中的兩個目錄路徑
				String modipath = request.getSession().getServletContext().getRealPath("/upload/workerCard"+filename);
				File file = new File(modipath);
				if(file.exists()){
					try {
						//添加ZipEntry,並ZipEntry中寫入文件流
						//這裏,加上i是防止要下載的文件有重名的導致下載失敗
						zipos.putNextEntry(new ZipEntry(filename));
						os = new DataOutputStream(zipos);
						InputStream is = new FileInputStream(file);
						byte[] b = new byte[100];
						int length = 0;
						while((length = is.read(b))!= -1){
							os.write(b, 0, length);
						}
						is.close();
						zipos.closeEntry();
					} catch (IOException e) {
						e.printStackTrace();
					} 
				}
		}
		 //關閉流
		try {
			os.flush();
			os.close();
			zipos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}    

	}

Worker.java

package com.huahang.model;

import java.util.Date;
import java.util.List;

import org.springframework.web.multipart.MultipartFile;

public class Worker {

	 private Integer id;
	 private Integer projectWorktypeId;
	 private String workerName;
	 private Integer workerAge;
	 private String workerPhone;
	 private String workerCard;
	 private String workerScanFront;
	 private String workerScanBack;
	 private String bankType;
	 private String bankNumber;
	 private Integer status;
	 private String createBy;
	 private Date createTime;
	 private String modifyBy;
	 private Date modifyTime;
	 private Integer leader;
	 private String corpCode;
	 private Integer deleted;
	 private Integer version;
	 
	 private Integer count;
	 
	 private String image;
     private MultipartFile file;
     
     private String templeteName;
     
     private String contractContent;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getProjectWorktypeId() {
		return projectWorktypeId;
	}

	public void setProjectWorktypeId(Integer projectWorktypeId) {
		this.projectWorktypeId = projectWorktypeId;
	}

	public String getWorkerName() {
		return workerName;
	}

	public void setWorkerName(String workerName) {
		this.workerName = workerName;
	}

	public Integer getWorkerAge() {
		return workerAge;
	}

	public void setWorkerAge(Integer workerAge) {
		this.workerAge = workerAge;
	}

	public String getWorkerPhone() {
		return workerPhone;
	}

	public void setWorkerPhone(String workerPhone) {
		this.workerPhone = workerPhone;
	}

	public String getWorkerCard() {
		return workerCard;
	}

	public void setWorkerCard(String workerCard) {
		this.workerCard = workerCard;
	}

	public String getWorkerScanFront() {
		return workerScanFront;
	}

	public void setWorkerScanFront(String workerScanFront) {
		this.workerScanFront = workerScanFront;
	}

	public String getWorkerScanBack() {
		return workerScanBack;
	}

	public void setWorkerScanBack(String workerScanBack) {
		this.workerScanBack = workerScanBack;
	}

	public String getBankType() {
		return bankType;
	}

	public void setBankType(String bankType) {
		this.bankType = bankType;
	}

	public String getBankNumber() {
		return bankNumber;
	}

	public void setBankNumber(String bankNumber) {
		this.bankNumber = bankNumber;
	}

	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}

	public String getCreateBy() {
		return createBy;
	}

	public void setCreateBy(String createBy) {
		this.createBy = createBy;
	}

	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

	public String getModifyBy() {
		return modifyBy;
	}

	public void setModifyBy(String modifyBy) {
		this.modifyBy = modifyBy;
	}

	public Date getModifyTime() {
		return modifyTime;
	}

	public void setModifyTime(Date modifyTime) {
		this.modifyTime = modifyTime;
	}

	public Integer getLeader() {
		return leader;
	}

	public void setLeader(Integer leader) {
		this.leader = leader;
	}

	public String getCorpCode() {
		return corpCode;
	}

	public void setCorpCode(String corpCode) {
		this.corpCode = corpCode;
	}

	public Integer getDeleted() {
		return deleted;
	}

	public void setDeleted(Integer deleted) {
		this.deleted = deleted;
	}

	public Integer getVersion() {
		return version;
	}

	public void setVersion(Integer version) {
		this.version = version;
	}

	public Integer getCount() {
		return count;
	}

	public void setCount(Integer count) {
		this.count = count;
	}

	public String getImage() {
		return image;
	}

	public void setImage(String image) {
		this.image = image;
	}

	public MultipartFile getFile() {
		return file;
	}

	public void setFile(MultipartFile file) {
		this.file = file;
	}

	public String getTempleteName() {
		return templeteName;
	}

	public void setTempleteName(String templeteName) {
		this.templeteName = templeteName;
	}

	public String getContractContent() {
		return contractContent;
	}

	public void setContractContent(String contractContent) {
		this.contractContent = contractContent;
	}

	@Override
	public String toString() {
		return "Worker [id=" + id + ", projectWorktypeId=" + projectWorktypeId
				+ ", workerName=" + workerName + ", workerAge=" + workerAge
				+ ", workerPhone=" + workerPhone + ", workerCard=" + workerCard
				+ ", workerScanFront=" + workerScanFront + ", workerScanBack="
				+ workerScanBack + ", bankType=" + bankType + ", bankNumber="
				+ bankNumber + ", status=" + status + ", createBy=" + createBy
				+ ", createTime=" + createTime + ", modifyBy=" + modifyBy
				+ ", modifyTime=" + modifyTime + ", leader=" + leader
				+ ", corpCode=" + corpCode + ", deleted=" + deleted
				+ ", version=" + version + ", count=" + count + ", image="
				+ image + ", file=" + file + ", templeteName=" + templeteName
				+ ", contractContent=" + contractContent + "]";
	}
     
   
  
		
}

WorkerMapper.java

package com.huahang.dao;
import java.util.List;

import com.huahang.model.Worker;

public interface WorkerMapper {

		public List<Worker> findAllWorkerByWhere(Worker worker);
		
		public Worker findWorkerById(Integer id);
		
		public List<Worker> findLabContractById(Integer id);
		
		public List<Worker> findPageData(Worker worker);
		
		public int addWorker(Worker worker);

		public int updateWorkerById(Worker worker);

		public int deleteWorkerById(Integer id);
		
		public int deleteContractContentById(Integer id);
		
		public int deleteMenuBatch(List<Integer> ids);
		
		public int banWorker(Integer id);//
		
		public int arouseWorker(Integer id);
		
		public int updateSqlpath(Worker worker);
		
		public int updateContractSqlpath(Worker worker);
		
		public List<Worker> findAllBankType();
}

WorkerMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper  namespace="com.huahang.dao.WorkerMapper">

<resultMap id="WorkerMap" type="com.huahang.model.Worker" >
		<id column="id" property="id"  />
		<id column="project_worktype_id" property="projectWorktypeId"  />
		<id column="worker_name" property="workerName"  />
		<id column="worker_age" property="workerAge"  />
		<id column="worker_phone" property="workerPhone"/>
		<id column="worker_card" property="workerCard"  />
		<id column="worker_scan_front" property="workerScanFront"  />
		<id column="worker_scan_back" property="workerScanBack"  />
		<id column="bank_type" property="bankType"  />
		<id column="bank_number" property="bankNumber"  />
		<id column="status" property="status"  />
		<id column="create_by" property="createBy"  />
		<id column="create_time" property="createTime"  />
		<id column="modify_by" property="modifyBy"  />
		<id column="modify_time" property="modifyTime"  />
		<id column="leader" property="leader"  />
		<id column="corp_code" property="corpCode"  />
		<id column="deleted" property="deleted"  />
		<id column="version" property="version"  />
		<id column="count" property="count"/>
		
		<id column="templete_name" property="bankType" />
	
		<id column="contract_content" property="contractContent" />
	
</resultMap>


<!-- select * ,(select count(*) from m_worker_project where project_worktype_id=80) as 'count' from m_worker_project order by create_time desc -->
<select id="findAllWorkerByWhere" resultMap="WorkerMap">
select * ,(select count(*) from m_worker_project where 1=1
<if test="workerName != null and workerName!=''">
and worker_name like '%${workerName}%'
</if>
<if test="projectWorktypeId>0">
and project_worktype_id=#{projectWorktypeId} 
</if>
<if test="id>0">
and id=#{id}
</if>
<if test="workerPhone!=null and workerPhone!=''">
and worker_phone=#{workerPhone}
</if>
<if test="workerCard!=null and workerCard!=''">
and worker_card=#{workerCard}
</if>
<if test="1==1">
and deleted=0 
</if>
) as 'count' 

from m_worker_project where 1=1

<if test="workerName != null and workerName!=''">
and worker_name like '%${workerName}%'
</if>
<if test="projectWorktypeId>0">
and project_worktype_id=#{projectWorktypeId} 
</if>
<if test="id>0">
and id=#{id}
</if>
<if test="workerPhone!=null and workerPhone!=''">
and worker_phone=#{workerPhone}
</if>
<if test="1==1">
and deleted=0 
</if>
  order by CASE WHEN leader = 1 THEN 100 ELSE 1000 END
</select>

<select id="findWorkerById" resultMap="WorkerMap"  >
select * from m_worker_project where id=#{id} and deleted=0
</select>

<select id="findAllBankType" resultMap="WorkerMap"  >
select id,templete_name  from m_templete  where deleted=0
</select>

<select id="findPageData" resultMap="WorkerMap"  >
select worker_scan_front,worker_scan_back from m_worker_project where delete=0 
<if test="projectWorktypeId>0">
and project_worktype_id=#{projectWorktypeId} 
</if>
<if test="id>0">
and id in 
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>

<update id="deleteMenuBatch" parameterType="java.util.List">
update m_worker_project set deleted=1 where id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>

<update id="banWorker" parameterType="Worker">
update m_worker_project set status=1 where id =#{id}
</update>

<update id="arouseWorker" parameterType="Worker">
update m_worker_project set status=0 where id =#{id}
</update>

<insert id="addWorker" parameterType="Worker" >
  insert into m_worker_project (project_worktype_id,
	  worker_name,worker_age,worker_phone,worker_card,
	  worker_scan_front,worker_scan_back,bank_type,
	  bank_number,status,create_by,create_time,modify_by,
	  modify_time,leader,corp_code,deleted,version)  
  values (#{projectWorktypeId},#{workerName},
	  #{workerAge},#{workerPhone},#{workerCard},
	  #{workerScanFront},#{workerScanBack},#{bankType},
	  #{bankNumber},#{status},#{createBy},#{createTime},
	  #{modifyBy},#{modifyTime},#{leader},#{corpCode},
	  #{deleted},#{version}) 
 </insert>

<update id="updateWorkerById" parameterType="Worker" >
    update  m_worker_project set project_worktype_id=#{projectWorktypeId},
		worker_name=#{workerName},worker_age=#{workerAge},
		worker_phone=#{workerPhone},worker_card=#{workerCard},
		bank_type=#{bankType},bank_number=#{bankNumber},status=#{status},
		modify_by=#{modifyBy},modify_time=#{modifyTime},leader=#{leader},
		corp_code=#{corpCode},deleted=#{deleted},version=#{version} 
	where id = #{id}
</update>
<update id="updateSqlpath" parameterType="Worker" >
update m_worker_project set worker_scan_front=#{workerScanFront},worker_scan_back=#{workerScanBack} where id=#{id}
</update>

<delete id="deleteWorkerById" parameterType="Worker" >
update m_worker_project  set  deleted =1  where id = #{id}
</delete>

<delete id="deleteContractContentById" parameterType="Worker" >
update m_labor_contract  set  deleted =1  where id = #{id}
</delete>

<insert id="updateContractSqlpath" parameterType="Worker" >
 insert into m_labor_contract (contract_content,
	  worker_project_id,create_by,create_time,modify_by,
	  modify_time,corp_code,deleted,version)  
  values (#{contractContent},#{id},#{createBy},#{createTime},
	  #{modifyBy},#{modifyTime},#{corpCode},
	  #{deleted},#{version}) 
</insert>
<select id="findLabContractById" resultMap="WorkerMap"  >
select * from m_labor_contract where worker_project_id=#{id} and deleted =0
</select>
</mapper>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章