zoukankan      html  css  js  c++  java
  • 下载图片(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;
            }
        }
    
    
    
    }
  • 相关阅读:
    滑雪
    CSS被误删了 心态炸了。
    About Me
    偶数个3|递归|递推
    luogu P3200 [HNOI2009]有趣的数列|Catalan数|数论
    Sumdiv|同余|约数|拓展欧几里得算法
    博弈论
    友链——大佬们的博客
    【翻译】PalmOS 的PDB格式文件
    用acme.sh给ssl证书续期
  • 原文地址:https://www.cnblogs.com/ki16/p/14872765.html
Copyright © 2011-2022 走看看