java 批量下载文件 打包成zip包

这篇具有很好参考价值的文章主要介绍了java 批量下载文件 打包成zip包。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 创建DownLoadUrlStream承载数据
import lombok.Data;
import java.io.InputStream;

@Data
public class DownLoadUrlStream {
    //文件地址 比如/123/234/1.txt
    private String url;
    //文件流
    private InputStream stream;

}
  1. 创建工具类,进行zip包压缩

import com.valid.util.view.DownLoadUrlStream;
import com.valid.util.view.DownLoadUrlString;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Component
public class DownloadUtils {
	/**
     * 
     * @param downLoadUrlStreams 文件信息 地址 流
     * @param zipName 压缩包名称
     * @param response
     * @throws IOException
     */
    public void downloadFolder(List<DownLoadUrlStream> downLoadUrlStreams,String zipName, HttpServletResponse response) throws IOException {

        response.setContentType("application/octet-stream");

        response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(zipName,"UTF-8")  + "\"");
        Set<String> paths = new HashSet<>(); // 用于记录已经添加到压缩文件中的目录

        try {
            ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
            for (DownLoadUrlStream file : downLoadUrlStreams) {
                String virtualPath = file.getUrl().substring(1);
                String[] pathArray = virtualPath.split("/");
                //构建文件的目录结构
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < pathArray.length - 1; i++) {
                    sb.append(pathArray[i]).append("/");
                    String folderPath = sb.toString();
                    if (!paths.contains(folderPath)) { // 如果该目录还未被添加到压缩文件中,则添加目录
                        ZipEntry folderEntry = new ZipEntry(folderPath);
                        zipOut.putNextEntry(folderEntry);
                        zipOut.closeEntry();
                        paths.add(folderPath); // 将新添加的目录记录到集合中
                    }
                }
                ZipEntry entry = new ZipEntry(virtualPath);
                zipOut.putNextEntry(entry);
                //将文件流写入文件中
                InputStream inputStream =  file.getStream();
                byte[] buffer = new byte[1024];
                int len;
                while ((len = inputStream.read(buffer)) > 0) {
                    zipOut.write(buffer, 0, len);
                }
                inputStream.close();
                zipOut.closeEntry();
            }
            zipOut.flush();
            zipOut.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  }
   
  1. 封装数据,调用方法即可

文章来源地址https://www.toymoban.com/news/detail-655302.html

到了这里,关于java 批量下载文件 打包成zip包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux中文件的打包压缩、解压,下载到本地——zip,tar指令等

    目录 1 .zip后缀名:         1.1 zip指令         1.2 unzip指令 2 .tar后缀名 3. sz 指令 4. rz 指令 5. scp指令 语法:zip [namefile.zip]  [namefile]... 功能:将目录或者文件压缩成zip格式 常用选项:         -r : 递归处理,将指定目录下的所有文件和子目录一并处理。 语法:unzip [namefil

    2024年01月24日
    浏览(39)
  • 使用Java打包Zip文件

    在项目中可能会遇到,下载文件的情况,下载文件还是比较好处理的 比较简单的方式就是我们直接写入OutPutstream,网上会有很所类似的教程。 也可以使用一些现成的工具类。 那么当我们遇到了需要下载文件夹的时候,我们不得不遍历所有的文件,去逐个的下载文件,这个时

    2024年02月14日
    浏览(24)
  • Java实现文件下载zip包单文件等

    摘要 本次主要记录将多个文件打包到zip压缩包并完成下载;留个代码方便以后用到了ctrl c v 我使用的是 hutool工具包 的二次封装,下面直接列出工具类即可,具体API不再详述,需要详细了解的可以自行百度 注意: 1 工具类中文件参数都是以File对象接收的,如果你是远程URL下载文件的

    2024年02月11日
    浏览(32)
  • 根据若依系统+minio实现批量下载附件并自动压缩成zip

    效果实现:   分割!!!! 以下代码参考于 http://t.csdn.cn/4dUmDwg 话不多说 直接从后端开始 0.首先是pom依赖 1.后端Controller ids和tableName为我业务需要(主要是查询数据库的附件表) 2.Service实现层 需要各位自己搜索minio关于下载的代码 也就是获取图片的inputStream流(因为各自代码逻辑不同

    2024年02月09日
    浏览(45)
  • 【Java】对Minio指定Bucket大量文件的批量下载与本地文件夹的批量上传

    需要批量下载一个bucket下的内容,bucket下文件有19GB+,且文件夹结构复杂,使用官方的Console无法完成这么大量文件的下载,而且也不支持文件夹的分享,所以自己写个工具下载,顺便把上传的也写了。 使用官方的打包下载,由于文件太多,一直转,而且session一失效,或者刷

    2024年02月09日
    浏览(41)
  • 从gitlab打包下载下来的zip包的代码之后,没有看到git,如何提交代码呢?

    如果你从GitLab下载了一个ZIP包,并且在本地解压后没有Git版本控制信息(.git文件夹),这意味着你只获得了代码的快照,而不是一个完整的Git仓库。在这种情况下,你无法直接使用Git来提交代码,因为没有Git仓库来跟踪更改历史和管理提交。 如果你想将这些代码提交到一个

    2024年01月24日
    浏览(35)
  • [python]批量解压文件夹下所有压缩包(rar、zip、7z)

            在文件夹作用包含许多压缩包的时候,解压起来就很费时费力,尤其是在文件夹还存在嵌套的情况下,解压起来就更麻烦了。Franpper今天给大家带来递归遍历指定路径下的所有文件和文件夹,批量解压所有压缩包的方法,帮大家一键解压。         常见的压缩包格

    2024年02月09日
    浏览(46)
  • Unity 下载Zip压缩文件并且解压缩

    1、Unity下载Zip压缩文件主要使用UnityWebRequest类。 可以参考以下方法: 其中这里我还用个while循环写了个下载进度条。  2、解压Zip压缩文件用到的System.IO.Compression下的ZipFile.OpenRead()方法。 具体可以参考以下代码:

    2024年02月03日
    浏览(32)
  • 前端js下载zip文件异常问题解决

    目录 一,本文解决问题如下 二,原下载代码 1,ajax get 下载文件 2,下载异常图: 三,成功下载的 1, JQuery 实现文件下载xhr 2,图例 引言: 本人使用的ajax 下载,由于下载CSV,文本之类的没有问题,下载zip是出现各种问题。发现是设置responseType:\\\"blob\\\"没生效,项目中又没有

    2024年02月09日
    浏览(29)
  • 前端调接口下载(导出)后端返回.zip压缩文件流(的坑!)

    前言:基于vue2+element-ui的一个后台管理系统,需求评审要加一个导入导出文件的功能,由于可能导出的数据量过大(几十万条数据),下载时间过长,所以用.zip压缩文件替代excel文件 本人以前也做过导出文件的功能,但是用的方法是后端处理数据然后放到另一个服务器上,前

    2024年02月03日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包