下载图片(I/O)

一、下载多张图片到默认地址

①、请求后台


var curPath = window.document.location.href;
var pathName = window.document.location.pathname;
var pos = curPath.indexOf(pathName);
var localhostPaht = curPath.substring(0,pos);
var projectName = pathName.substring(0,pathName.substr(1).indexOf('/')+1);
var baseuri = localhostPaht + projectName;

function onloadurl(url){
    var qrcode = baseuri + "/xxxxx/onloadurl?qrcodeUrl=" + url;
    var alink = document.createElement("a");
    alink.href = qrcode;
    alink.download =  new Date().getTime() + ".jpg";
    alink.click();
    
}

②后台处理

/**
     * 下载图片信息
     * @param request
     * @param response
     * @param id
     * @return
     * @throws IOException 
     * @throws MalformedURLException 
     */
    @RequestMapping("/onloadurl")
    public void onloadurl(HttpServletRequest req, HttpServletResponse response, String qrcodeUrl) throws MalformedURLException, IOException {
        
        HttpURLConnection connection = (HttpURLConnection) new URL(qrcodeUrl).openConnection();
        connection.setReadTimeout(5000);
        connection.setConnectTimeout(5000);
        connection.setRequestMethod("GET");
        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            InputStream inputStream = connection.getInputStream();
            if (inputStream != null) {
                BufferedImage bufferedImage = ImageIO.read(inputStream);
                 ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
                 response.getOutputStream().close();
                inputStream.close();
            }
        }
        
    }

 二、下载多张图片变成zip到本地地址

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;


/**
 * @author 作者 ki16:
 * @version 创建时间:2021年6月15日 下午5:28:03
 *
 */

public class TestMain {
    
    public static void main(String[] args) {
        //创建父级目录 用于存放分区(分区中存放多个分类)
        String fatherPath = "D:\\宠物区";
        File fatherFile = new File(fatherPath);
        try {
            if (!fatherFile.exists()) {
                fatherFile.mkdir();
            } else {
                fatherFile.delete();
                fatherFile.mkdir();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        //创建分类list 存放分类
        List<String> itemList = new ArrayList<>();
        itemList.add("dog");
        itemList.add("cat");
        itemList.add("mouse");

        //创建list 存放图片
        List<File> fileList = new ArrayList<>();
        fileList.add(new File("E:/新建文件夹11/图片/dog.jpg"));//本地图片的地址
        fileList.add(new File("E:/新建文件夹11/图片/1.jpg"));
        

        for (String item : itemList) {
            //遍历存储图片地址
            String url = fatherPath + "/" + item + ".zip";
            System.out.println("url================>" + url);
            File zipFile = new File(url);
            // 调用压缩方法
            ZipMultiFileUtil.zipFiles(fileList.stream().toArray(File[]::new), zipFile);
        }

        //将项目名称的文件夹 压缩为zip
        String fileDir ="D:\\宠物区";
        System.out.println("fileDir=" + fileDir + "          fatherPath=" + fatherPath );
        ZipMultiFileUtil.fileToZip(fatherPath, fileDir, fatherPath + ".zip");
    }
    
    

     static class ZipMultiFileUtil {

        public static void zipFiles(File[] srcFiles, File zipFile) {
            try {
                if (srcFiles.length != 0) {
                    // 判断压缩后的文件存在不,不存在则创建
                    if (!zipFile.exists()) {
                        zipFile.createNewFile();
                    } else {
                        zipFile.delete();
                        zipFile.createNewFile();
                    }

                    // 创建 FileInputStream 对象
                    FileInputStream fileInputStream = null;
                    // 实例化 FileOutputStream 对象
                    FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
                    // 实例化 ZipOutputStream 对象
                    ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream);
                    // 创建 ZipEntry 对象
                    ZipEntry zipEntry = null;
                    // 遍历源文件数组
                    for (int i = 0; i < srcFiles.length; i++) {
                        System.out.println("==============srcFiles===============" + srcFiles[i]);
                        // 将源文件数组中的当前文件读入 FileInputStream 流中
                        fileInputStream = new FileInputStream(srcFiles[i]);
                        // 实例化 ZipEntry 对象,源文件数组中的当前文件
                        zipEntry = new ZipEntry(srcFiles[i].getName());
                        zipOutputStream.putNextEntry(zipEntry);
                        // 该变量记录每次真正读的字节个数
                        int len;
                        // 定义每次读取的字节数组
                        byte[] buffer = new byte[1024];
                        while ((len = fileInputStream.read(buffer)) > 0) {
                            zipOutputStream.write(buffer, 0, len);
                        }
                    }
                    zipOutputStream.closeEntry();
                    zipOutputStream.close();
                    fileInputStream.close();
                    fileOutputStream.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        /**
         * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下
         *
         * @param sourceFilePath :待压缩的文件路径
         * @param zipFilePath    :压缩后存放路径
         * @param fileName       :压缩后文件的名称
         * @return
         */
        public static boolean fileToZip(String sourceFilePath, String zipFilePath, String fileName) {
            boolean flag = false;
            File sourceFile = new File(sourceFilePath);
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            FileOutputStream fos = null;
            ZipOutputStream zos = null;

            if (sourceFile.exists() == false) {
                System.out.println("待压缩的文件目录:" + sourceFilePath + "不存在");
                sourceFile.mkdir(); // 新建目录
            }
            try {
                //File zipFile = new File(zipFilePath + "/" + fileName);
                File zipFile = new File(fileName);
                System.out.println("======zipFile=========>" + zipFile);
                if (zipFile.exists()) {
                    System.out.println(zipFilePath + "目录下存在名字为:" + fileName + ".zip" + "打包文件.");
                } else {
                    File[] sourceFiles = sourceFile.listFiles();
                    if (null == sourceFiles || sourceFiles.length < 1) {
                        System.out.println("待压缩的文件目录:" + sourceFilePath + "里面不存在文件,无需压缩.");
                    } else {
                        fos = new FileOutputStream(zipFile);
                        zos = new ZipOutputStream(new BufferedOutputStream(fos));
                        byte[] bufs = new byte[1024 * 10];
                        for (int i = 0; i < sourceFiles.length; i++) {
                            //创建ZIP实体,并添加进压缩包
                            ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());
                            zos.putNextEntry(zipEntry);
                            //读取待压缩的文件并写进压缩包里
                            fis = new FileInputStream(sourceFiles[i]);
                            bis = new BufferedInputStream(fis, 1024 * 10);
                            int read = 0;
                            while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {
                                zos.write(bufs, 0, read);
                            }
                        }
                        flag = true;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } finally {
                //关闭流
                try {
                    if (null != bis) bis.close();
                    if (null != zos) zos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            }
            return flag;
        }
    }



}

 

posted @ 2021-06-10 20:51  ki1616  阅读(108)  评论(0编辑  收藏  举报