java图片的导出,并压缩
java 压缩包jar包使用的是commons-compress-1.6.jar
/*** 导出图片* @param request* @param response*/@RequestMapping("/exportPicture")public void exportPicture(HttpServletRequest request,HttpServletResponse response) throws Exception {//定义根路径String rootPath = request.getRealPath("/");//@Test测试,rootPath 可直接写路径 eg://String rootPath = "D:\\a.jpg";//创建文件File file = new File(rootPath+"temp_download");//判断文件是否存在,如果不存在,则创建此文件夹if(!file.exists()){file.mkdir();}String name = "图片压缩包下载";String fileName = name+new Date().getTime();String zipFileName = fileName + ".zip";File zipFile = null;String path = rootPath + "temp_download";//调用工具类获取图片byte[] data = ImageByteUtil.image2byte("F:\\blank.jpg");//new一个文件对象用来保存图片,默认保存当前工程根目录 if(data != null){File imageFile = new File(path+File.separator+fileName+".jpg"); //创建输出流 FileOutputStream outStream = new FileOutputStream(imageFile); //写入数据 outStream.write(data); //关闭输出流 outStream.close();}try {//获取创建好的图片文件File imageFile = new File(path+"/"+fileName+".jpg");// 打成压缩包zipFile = new File(path + "/" + zipFileName);FileOutputStream zipFos = new FileOutputStream(zipFile);ArchiveOutputStream archOut = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, zipFos);if (archOut instanceof ZipArchiveOutputStream) {ZipArchiveOutputStream zos = (ZipArchiveOutputStream) archOut;ZipArchiveEntry zipEntry = new ZipArchiveEntry(imageFile, imageFile.getName());zos.putArchiveEntry(zipEntry);zos.write(FileUtils.readFileToByteArray(imageFile));zos.closeArchiveEntry();zos.flush();zos.close();}// 压缩完删除txt文件if (imageFile.exists()) {imageFile.delete();}// 输出到客户端OutputStream out = null;out = response.getOutputStream();response.reset();response.setHeader("Content-Disposition", "attachment;filename=" + new String(zipFileName.getBytes("GB2312"), "ISO-8859-1"));response.setContentType("application/octet-stream; charset=utf-8");response.setCharacterEncoding("UTF-8");out.write(FileUtils.readFileToByteArray(zipFile));out.flush();out.close();//测试就不要输出到客户端了,把下面这段删除压缩包的代码注释掉,//就能看到效果了// 输出客户端结束后,删除压缩包if (zipFile.exists()) {zipFile.delete();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ArchiveException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
附工具类 ImageByteUtil 图片与byte数组互转util
public class ImageByteUtil {/*** 实现图片与byte数组之间的互相转换* @param args*/public static void main(String[] args) {//定义路径String path = "F:\\blank.jpg";byte[] data = image2byte(path);System.out.println(data.length);}/*** 将图片转换为byte数组* @param path 图片路径* @return*/public static byte[] image2byte(String path){//定义byte数组byte[] data = null;//输入流FileImageInputStream input = null;try {input = new FileImageInputStream(new File(path));ByteArrayOutputStream output = new ByteArrayOutputStream();byte[] buf = new byte[1024];int numBytesRead = 0;while ((numBytesRead = input.read(buf)) != -1) {output.write(buf, 0, numBytesRead);}data = output.toByteArray();output.close();input.close();}catch (FileNotFoundException ex1) {ex1.printStackTrace();}catch (IOException ex1) {ex1.printStackTrace();}return data;}//byte数组到图片public void byte2image(byte[] data,String path){if(data.length<3||path.equals("")) return;try{FileImageOutputStream imageOutput = new FileImageOutputStream(new File(path));imageOutput.write(data, 0, data.length);imageOutput.close();System.out.println("Make Picture success,Please find image in " + path);} catch(Exception ex) {System.out.println("Exception: " + ex);ex.printStackTrace();}}//byte数组到16进制字符串public String byte2string(byte[] data){if(data==null||data.length<=1) return "0x";if(data.length>200000) return "0x";StringBuffer sb = new StringBuffer();int buf[] = new int[data.length];//byte数组转化成十进制for(int k=0;k<data.length;k++){buf[k] = data[k]<0?(data[k]+256):(data[k]);}//十进制转化成十六进制for(int k=0;k<buf.length;k++){if(buf[k]<16) sb.append("0"+Integer.toHexString(buf[k]));else sb.append(Integer.toHexString(buf[k]));}return "0x"+sb.toString().toUpperCase();} }
本文复制参考:http://blog.csdn.net/u012151597/article/details/52945560?locationNum=4&fps=1
感谢作者”洋葱花瓣”的整理.