最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?多個(gè)文件生成zip包、下載zip包的實(shí)現(xiàn)代碼

 更新時(shí)間:2024年01月28日 16:24:26   作者:胡蘿卜★  
這篇文章主要介紹了Java?多個(gè)文件生成zip包、下載zip包,包括文件上傳,文件下載,多個(gè)文件打成zip包的操作代碼,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下

Java 多個(gè)文件生成zip包、下載zip包

一、文件上傳

代碼實(shí)現(xiàn)

 	/**
     * 點(diǎn)擊按鈕 文件上傳
     */
    @PostMapping("/uploadFile")
    public String uploadFile(@RequestParam("file") MultipartFile file){
        String upload = fileService.upload(file);
        System.out.println("upload:"+upload);
        return "上傳成功對(duì)應(yīng)路徑:"+upload;
    }
public  String  upload(MultipartFile file){
    	//上傳路徑
        String path = "D:\\var\\file\\uploadFile"+"\\"+file.getOriginalFilename();
        String fileSavePath = null;
        try {
            boolean upload = this.saveFileUpload(path, this.multipartFileToFile(file));
            if (upload) {
                fileSavePath = path;
            }
        } catch (Exception e) {
            log.error("文件上傳失敗,", e);
        }
        return fileSavePath;
    }
    /**
     *
     * @param savePath 保存路徑
     * @param file
     * @return
     */
    public  boolean saveFileUpload(String savePath, File file) {
        try {
            if (StringUtils.isEmpty(savePath)) {
                log.info("savePath is null");
                return false;
            }
            log.info("save file path : " + savePath);
            java.nio.file.Files.copy(file.toPath(), new File(savePath).toPath());
            return true;
        } catch (IOException e) {
            log.error("saveFileUpload error", e);
        }
        return false;
    }
    /**
     * MultipartFile 轉(zhuǎn) File
     */
    public File multipartFileToFile(MultipartFile file) {
        File toFile = null;
        try{
            if (file == null || StringUtils.isEmpty(file.getOriginalFilename()) || file.getSize() <= 0) {
                return null;
            } else {
                InputStream ins;
                ins = file.getInputStream();
                toFile = new File(file.getOriginalFilename());
                inputStreamToFile(ins, toFile);
                ins.close();
            }
        }catch (Exception e){
            log.error("multipartFileToFile err", e);
        }
        return toFile;
    }
    /**
     *  獲取文件流
     */
    private  void inputStreamToFile(InputStream ins, File file) {
        try {
            OutputStream os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            ins.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

結(jié)果展示

在這里插入圖片描述

二、多個(gè)文件打成zip包

代碼實(shí)現(xiàn)

 @PostMapping("/yaZipFile")
    public String yaZipFile() {
        fileService.yaZipFile();
        return "壓縮成功";
    }

路徑 可以從前端傳過(guò)來(lái)

public void yaZipFile() {
        try {
            //進(jìn)行壓縮
            boolean b = FileDownloadUtils.generateFile("D:\\var\\file\\uploadFile", "zip", "D:\\var\\file", "uploadFiles");
            if(b){
                log.info("壓縮成功....");
                File sourceFile = new File("D:\\var\\file\\uploadFile");
                boolean flag = FileDownloadUtils.deleteDir(sourceFile);
                if(flag){
                    log.info("刪除成功.....");
                }
            }
        }catch (Exception e){
            log.error("發(fā)生異常error:{}",e);
        }
    }
 /**
     * @param path    要壓縮的文件路徑
     * @param format  生成的格式(zip、rar)
     * @param zipPath zip的路徑
     * @param zipName zip文件名
     * @Description 將多個(gè)文件進(jìn)行壓縮到指定位置
     */
    public static boolean generateFile(String path, String format, String zipPath, String zipName) throws Exception {
        File file = new File(path);
        // 壓縮文件的路徑不存在
        if (!file.exists()) {
            throw new Exception("路徑 " + path + " 不存在文件,無(wú)法進(jìn)行壓縮...");
        }
        // 用于存放壓縮文件的文件夾
        String generateFile = zipPath + File.separator;
        File compress = new File(generateFile);
        // 如果文件夾不存在,進(jìn)行創(chuàng)建
        if (!compress.exists()) {
            compress.mkdirs();
        }
        // 目的壓縮文件
        String generateFileName = compress.getAbsolutePath() + File.separator + zipName + "." + format;
        // 輸出流
        FileOutputStream outputStream = new FileOutputStream(generateFileName);
        // 壓縮輸出流
        ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(outputStream));
        //壓縮
        generateFile(zipOutputStream, file, "");
        System.out.println("源文件位置:" + file.getAbsolutePath() + ",目的壓縮文件生成位置:" + generateFileName);
        // 關(guān)閉 輸出流
        zipOutputStream.close();
        return true;
    }
    /**
     * @param out  輸出流
     * @param file 目標(biāo)文件
     * @param dir  文件夾
     * @throws Exception
     */
    private static void generateFile(ZipOutputStream out, File file, String dir) throws Exception {
        // 當(dāng)前的是文件夾,則進(jìn)行一步處理
        if (file.isDirectory()) {
            //得到文件列表信息
            File[] files = file.listFiles();
            //將文件夾添加到下一級(jí)打包目錄
            out.putNextEntry(new ZipEntry(dir + "/"));
            dir = dir.length() == 0 ? "" : dir + "/";
            //循環(huán)將文件夾中的文件打包
            for (int i = 0; i < files.length; i++) {
                generateFile(out, files[i], dir + files[i].getName());
            }
        } else { // 當(dāng)前是文件
            // 輸入流
            FileInputStream inputStream = new FileInputStream(file);
            // 標(biāo)記要打包的條目
            out.putNextEntry(new ZipEntry(dir));
            // 進(jìn)行寫操作
            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = inputStream.read(bytes)) > 0) {
                out.write(bytes, 0, len);
            }
            // 關(guān)閉輸入流
            inputStream.close();
        }
    }

結(jié)果展示:

壓縮包生成,把之前的目錄刪除

三、文件下載

代碼實(shí)現(xiàn)

 @PostMapping("/downZipFile")
    public String downZipFile(HttpServletResponse response){
        fileService.downZipFile(response);
        return "下載成功";
    }

路徑、文件名 也可以從前端傳過(guò)來(lái)

public void downZipFile(HttpServletResponse response){
        String title = "uploadFiles.zip";
        //壓縮文件路徑 D:\var\file
        File filePath = new File("D:\\var\\file" + File.separator + title);
        String filename = System.currentTimeMillis()+"_"+title;
        //設(shè)置文件路徑
        if (filePath.exists()) {
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            try {
                //設(shè)置下載文件類型
                response.setContentType("application/octet-stream");
                response.setHeader("Content-disposition", "attachment; filename=" + new String(filename.getBytes("utf-8"), "ISO8859-1"));
                byte[] buffer = new byte[4096];
                fis = new FileInputStream(filePath);
                bis = new BufferedInputStream(fis);
                OutputStream os = response.getOutputStream();
                int i = bis.read(buffer);
                while (i != -1) {
                    os.write(buffer, 0, i);
                    i = bis.read(buffer);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (bis != null) {
                    try {
                        bis.close();
                        // 刪除臨時(shí)文件
                        filePath.delete();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (fis != null) {
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

結(jié)果展示

java 批量下載將多個(gè)文件(minio中存儲(chǔ))壓縮成一個(gè)zip包

到此這篇關(guān)于Java 多個(gè)文件生成zip包、下載zip包的文章就介紹到這了,更多相關(guān)Java 多個(gè)文件生成zip包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java爬取網(wǎng)站源代碼和鏈接代碼實(shí)例

    Java爬取網(wǎng)站源代碼和鏈接代碼實(shí)例

    這篇文章主要介紹了Java爬取網(wǎng)站源代碼和鏈接代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 三步輕松搭建springMVC框架

    三步輕松搭建springMVC框架

    這篇文章主要教大家三步輕松搭建springMVC框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • SpringBoot配置的加載流程詳細(xì)分析

    SpringBoot配置的加載流程詳細(xì)分析

    了解內(nèi)部原理是為了幫助我們做擴(kuò)展,同時(shí)也是驗(yàn)證了一個(gè)人的學(xué)習(xí)能力,如果你想讓自己的職業(yè)道路更上一層樓,這些底層的東西你是必須要會(huì)的,這篇文章主要介紹了SpringBoot配置的加載流程
    2023-01-01
  • Java中的Cursor使用詳解

    Java中的Cursor使用詳解

    本文介紹了Java中的Cursor接口及其在大數(shù)據(jù)集處理中的優(yōu)勢(shì),包括逐行讀取、分頁(yè)處理、流控制、動(dòng)態(tài)改變查詢、并發(fā)控制和減少網(wǎng)絡(luò)流量等,感興趣的朋友一起看看吧
    2025-02-02
  • Spring實(shí)戰(zhàn)之清除緩存操作示例

    Spring實(shí)戰(zhàn)之清除緩存操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之清除緩存操作,結(jié)合實(shí)例形式詳細(xì)分析了spring清除緩存操作具體步驟、配置、領(lǐng)域模型及相關(guān)使用技巧,需要的朋友可以參考下
    2020-01-01
  • Java中關(guān)于size()>0?和isEmpt()的性能考量

    Java中關(guān)于size()>0?和isEmpt()的性能考量

    這篇文章主要介紹了Java中關(guān)于size()>0?和isEmpt()性能考量,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 淺談UUID生成的原理及優(yōu)缺點(diǎn)

    淺談UUID生成的原理及優(yōu)缺點(diǎn)

    UUID是一套用于生成全局唯一標(biāo)識(shí)符的標(biāo)準(zhǔn),也被稱為GUID?(Globally?Unique?Identifier),通過(guò)使用UUID可以在分布式系統(tǒng)中生成唯一的?ID,UUID的生成方式有多種,本文將詳細(xì)講解?UUID?的生成原理、特性、實(shí)用場(chǎng)景以及優(yōu)缺點(diǎn)
    2023-06-06
  • Java GZIPOutputStream流壓縮文件的操作

    Java GZIPOutputStream流壓縮文件的操作

    這篇文章主要介紹了Java GZIPOutputStream流壓縮文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Java中的內(nèi)存模型JMM詳細(xì)解讀

    Java中的內(nèi)存模型JMM詳細(xì)解讀

    這篇文章主要介紹了Java中的內(nèi)存模型JMM詳細(xì)解讀,Java?對(duì)內(nèi)存的抽象模型如下,每個(gè)線程都有一塊自己的私有內(nèi)存(也稱為工作內(nèi)存),當(dāng)線程使用變量時(shí),會(huì)把主內(nèi)存里面的變量復(fù)制到工作內(nèi)存,線程讀寫變量時(shí)操作的是自己工作內(nèi)存中的變量,需要的朋友可以參考下
    2023-12-12
  • Java集合與數(shù)組區(qū)別簡(jiǎn)介及相互轉(zhuǎn)換實(shí)例

    Java集合與數(shù)組區(qū)別簡(jiǎn)介及相互轉(zhuǎn)換實(shí)例

    這篇文章主要介紹了Java集合與數(shù)組區(qū)別簡(jiǎn)介及相互轉(zhuǎn)換實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01

最新評(píng)論

镇远县| 鸡东县| 南丰县| 岐山县| 开鲁县| 永泰县| 磐安县| 乌鲁木齐县| 怀化市| 农安县| 高安市| 五台县| 获嘉县| 洛扎县| 都安| 青阳县| 丰都县| 荥经县| 乌审旗| 包头市| 乐昌市| 襄樊市| 瑞丽市| 察隅县| 中西区| 西畴县| 西充县| 罗山县| 峨边| 宁南县| 龙泉市| 酒泉市| 中江县| 靖宇县| 沁源县| 墨竹工卡县| 永康市| 望谟县| 东至县| 化州市| 巢湖市|