public void downLoad(final HttpServletRequest request, final HttpServletResponse response) throws ArchiveException, Exception { // 定义根路径 String rootPath = request.getRealPath("/"); // 创建文件 File file = new File(rootPath + "temp_download"); // 判断文件是否存在,如果不存在,则创建此文件夹 if (!file.exists()) { file.mkdir(); } String name = "图片压缩包下载"; Date date = new Date(0); String fileName = name + date.getTime(); String zipFileName = fileName + ".zip"; File zipFile = null; String path = rootPath + "temp_download"; // 调用工具类获取图片 byte[] data = ImageByteUtil.image2byte("D:/考拉.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 block e.printStackTrace(); } } public static 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(); } }
java实现图片打包
猜你喜欢
转载自blog.csdn.net/qiaoxin666/article/details/80343579
今日推荐
周排行