java实现图片打包

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();
        }

    }

猜你喜欢

转载自blog.csdn.net/qiaoxin666/article/details/80343579