SpringMVC 图片压缩下载

package com.gosun.cecs.system.manager.action;

import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

public class PictureDownload {
	
    public static void getPictureStream(HttpServletRequest request,  
            HttpServletResponse response,
    		List<String> urlList,String carnum)  //图片url 列表 后面carnum只是用于命名的
            throws Exception {
        ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
      SimpleDateFormat sdf=new SimpleDateFormat("_yyyyMMdd_hhmmss");
        response.setContentType("text/html;charset=UTF-8");  
        request.setCharacterEncoding("UTF-8");   
        long fileLength = 0 ;
        String filename=carnum+sdf.format(new Date())+".rar"; //文件名  为rar格式
        response.setContentType("application/octet-stream");  
        response.setHeader("Content-disposition", "attachment; filename="  
                + new String(filename.getBytes("gb2312"), "ISO8859-1"));         
        /** 将数据转为流返回 */
        for (int i = 0; i < urlList.size(); i++) {
        	fileLength=fileLength+ new File(urlList.get(i)).length();
        	
            String urlString = urlList.get(i);
            urlString = new String(urlString.getBytes("UTF-8"), "GBK");
            URL url = new URL(urlString);
            if (url != null) {
                // File f = new File(urlString);
                //图片名称
                ZipEntry zipEntry = new ZipEntry(carnum+"_"+(i+1)+".jpg");
                zipOut.putNextEntry(zipEntry);
                InputStream in = url.openStream();
                byte b[] = new byte[2048];
                int length = 0;
                while ((length = in.read(b)) != -1) {
                    zipOut.write(b, 0, length);
                }
                zipOut.closeEntry();
                in.close();
            }
        }
        
        response.setHeader("Content-Length", String.valueOf(fileLength)); 
        
        zipOut.close();

    }

}
SpringMVC   图片压缩的静态类

 @RequestMapping(value = "picDownload")  
	 public ModelAndView picDownload(HttpServletRequest request,  
	            HttpServletResponse response,
	            String id   
			 ) throws Exception {  
	  VehTrace v=vehTraceManager.getvehTraceById(id);
			List<String> urlList=new ArrayList<String>();
			
			if(!StringUtils.isNullBlank(v.getCar_img_url1()))urlList.add(v.getCar_img_url1());
			if(!StringUtils.isNullBlank(v.getCar_img_url2()))urlList.add(v.getCar_img_url2());
			if(!StringUtils.isNullBlank(v.getCar_img_url3()))urlList.add(v.getCar_img_url3());
			if(!StringUtils.isNullBlank(v.getCar_img_url4()))urlList.add(v.getCar_img_url4());
			if(!StringUtils.isNullBlank(v.getCar_img_url5()))urlList.add(v.getCar_img_url5());
			String carnum=v.getPlate(); 
	  
	        PictureDownload.getPictureStream(request, response, urlList, carnum);
	  
	        return null;  
	    }  
Controller或者Action中 调用的方法 返回null就可以了  

 <form id="downForm" action="vehTrace.do?method=picDownload&id=${id}" method="post">
	</form>

    function downPicture(){
    
        $("#downForm").submit();
        
    }
这里使用 form表单来接收 二进制流的文件   不能使用ajax接收  因为ajax接收的类型为

  • "xml": 返回 XML 文档,可用 jQuery 处理。
  • "html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
  • "script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
  • "json": 返回 JSON 数据 。
  • "jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
  • "text": 返回纯文本字符串

没有二进制流的格式   所以这里就使用form 表单提交后返回的数据来下载压缩好的图片.





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