当前位置: 首页 > news >正文

网站建设客户分析购买seo关键词排名优化官网

网站建设客户分析,购买seo关键词排名优化官网,黄页88网客服电话,微信定制网站建设文章目录 SpringBoot+minio实现多文件下载1、SpringBoot+minio实现多文件打成一个压缩包下载1. 添加依赖2. 配置 MinIO 客户端3. 创建下载和压缩逻辑4. 创建控制器方法来触发下载5. 测试下载功能注意事项2、在minio指定的桶名下面生产一个文件夹1. MinIO 配置2. 编写业务逻辑文…

文章目录

    • SpringBoot+minio实现多文件下载
      • 1、SpringBoot+minio实现多文件打成一个压缩包下载
        • 1. 添加依赖
        • 2. 配置 MinIO 客户端
        • 3. 创建下载和压缩逻辑
        • 4. 创建控制器方法来触发下载
        • 5. 测试下载功能
        • 注意事项
      • 2、在minio指定的桶名下面生产一个文件夹
        • 1. MinIO 配置
        • 2. 编写业务逻辑
          • 文件夹操作和压缩下载
        • 3. 创建控制器
        • 4. 测试
        • 注意事项
      • 3、在minio指定的桶名下面生产一个临时文件夹
        • 1. 配置 MinIO 客户端
        • 2. 创建数据库实体类
        • 3. 创建存储库接口
        • 4. MinIO 服务实现
        • 5. 控制器实现
        • 6. 测试接口
        • 注意事项
      • 4、直接在内存中打包再上传
        • 1. MinIO 配置
        • 2. 创建数据库实体类
        • 3. 创建存储库接口
        • 4. 编写服务逻辑
        • 5. 创建控制器
        • 6. 测试接口
        • 注意事项
      • 5、本地生产一个临时目录进行打包再上传
        • 具体步骤如下:
        • 1. 使用系统临时目录
        • 示例代码
        • 2. 应用程序的特定临时目录
        • 3. 清理策略
        • 4. 权限和安全性
        • 5. 例子
        • 本地临时目录总结
        • 6. 添加依赖
        • 2. MinioService 实现
        • 3. 创建控制器
        • 4. 测试接口
        • 总结
      • 6、通过多线程将下载的文件合成在一个zip包中
        • 1. 添加依赖
        • 2. 创建 MinioService 类
        • 3. 创建控制器
        • 4. 测试接口
        • 注意事项
        • 总结
    • SpringBoot+minio实现文件批量下载
      • 1、for循环
        • 1. 准备工作
        • 2. 添加依赖
        • 3. 配置MinIO
        • 4. 创建MinIO配置类
        • 5. 创建下载控制器
        • 6. 测试下载功能
        • 7. 额外的压缩功能
        • 8. 安全性
        • 示例:压缩文件下载
        • 总结
      • 2、多线程
        • 1. 添加依赖
        • 2. 创建MinIO配置类
        • 3. 创建下载控制器
        • 4. 关键点解析
        • 5. 测试下载功能
        • 6. 性能优化
        • 7. 安全性
        • 总结
      • 3、多线程
        • 步骤概述
        • 1. 添加依赖
        • 2. 创建 MinioService 类
        • 3. 创建控制器
        • 4. 测试接口
        • 注意事项
        • 总结
    • 注意:提示没有transferTo(zipOut)这个方法
      • 解释
    • 运用

SpringBoot+minio实现多文件下载

1、SpringBoot+minio实现多文件打成一个压缩包下载

要在 Spring Boot 中使用 MinIO 实现多文件打包成一个压缩文件并下载,主要分为以下几个步骤:

  1. 连接 MinIO:创建 MinIO 客户端,用于与 MinIO 进行通信。
  2. 文件读取:从 MinIO 中读取多个文件。
  3. 文件压缩:将文件压缩为 ZIP 格式。
  4. 文件下载:将生成的 ZIP 文件流返回给客户端。
1. 添加依赖

如果还没有添加 MinIO 依赖,可以手动下载 MinIO 客户端库,或者直接用 Maven 来管理依赖:

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.3.5</version>
</dependency>
2. 配置 MinIO 客户端

application.properties 中添加 MinIO 配置:

minio.url=http://localhost:9000
minio.accessKey=your-access-key
minio.secretKey=your-secret-key
minio.bucketName=your-bucket

然后在 @Configuration 类中配置 MinIO 客户端:

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MinioConfig {@Value("${minio.url}")private String url;@Value("${minio.accessKey}")private String accessKey;@Value("${minio.secretKey}")private String secretKey;@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();}
}
3. 创建下载和压缩逻辑

在服务类中添加下载和压缩方法,以下代码会将指定的文件列表压缩成一个 ZIP 并返回给客户端。

import io.minio.GetObjectArgs;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;@Service
public class MinioService {@Autowiredprivate MinioClient minioClient;@Value("${minio.bucketName}")private String bucketName;public void downloadFilesAsZip(List<String> fileNames, HttpServletResponse response) {try {// 设置响应头,文件名为 download.zipresponse.setContentType("application/zip");response.setHeader("Content-Disposition", "attachment; filename=download.zip");// 创建 ZIP 输出流try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) {for (String fileName : fileNames) {// 获取每个文件的输入流try (InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build())) {// 创建 ZIP 文件条目zipOut.putNextEntry(new ZipEntry(fileName));// 将文件数据写入 ZIPbyte[] buffer = new byte[1024];int length;while ((length = inputStream.read(buffer)) >= 0) {zipOut.write(buffer, 0, length);}zipOut.closeEntry();  // 结束该条目的写入}}zipOut.finish();  // 完成 ZIP 文件}} catch (Exception e) {throw new RuntimeException("Error occurred while downloading files as zip", e);}}
}
4. 创建控制器方法来触发下载

在控制器中定义一个方法,接收前端的请求并调用服务类进行压缩与下载。

@RestController
public class FileDownloadController {@Autowiredprivate MinioService minioService;@GetMapping("/download-zip")public void downloadZip(@RequestParam List<String> fileNames, HttpServletResponse response) {minioService.downloadFilesAsZip(fileNames, response);}
}
5. 测试下载功能

现在可以通过 HTTP GET 请求测试该功能:

GET http://localhost:8080/download-zip?fileNames=file1.txt&fileNames=file2.jpg&fileNames=file3.pdf
注意事项
  • 内存消耗:如果文件较多或较大,生成 ZIP 文件的过程可能会占用大量内存。可以优化为逐个文件流写入 ZIP,避免内存问题。
  • 异常处理:可扩展异常处理,捕获 MinIO 连接失败、文件不存在等情况,并返回更详细的错误信息。

这个实现将从 MinIO 读取文件流,逐一压缩到 ZIP 中,并通过 HTTP 响应流返回给客户端。


2、在minio指定的桶名下面生产一个文件夹

SpringBoot+minio实现多文件下载时在minio指定的桶名下面生产一个文件夹,将需要下载放到这个文件夹中,并把这个文件夹打成一个压缩包后进行下载,下载成功后删除这个文件夹

在使用 Spring Boot 和 MinIO 实现上述功能时,可以按以下步骤操作:

  1. 创建 MinIO 文件夹:在 MinIO 指定的桶内创建一个文件夹。
  2. 上传文件到文件夹:将需要下载的文件复制到该文件夹。
  3. 打包文件夹为 ZIP 并下载:将文件夹内的文件打包为 ZIP 文件并返回给客户端。
  4. 清理文件夹:下载成功后,删除 MinIO 上的文件夹及其内容。

以下是实现的详细步骤和代码。

1. MinIO 配置

确保 MinIO 客户端配置正确。使用 application.properties 配置 MinIO 相关信息。

minio.url=http://localhost:9000
minio.accessKey=your-access-key
minio.secretKey=your-secret-key
minio.bucketName=your-bucket

并创建 MinIO 客户端配置类:

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MinioConfig {@Value("${minio.url}")private String url;@Value("${minio.accessKey}")private String accessKey;@Value("${minio.secretKey}")private String secretKey;@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();}
}
2. 编写业务逻辑

在服务类中添加方法来实现各步骤。

文件夹操作和压缩下载
import io.minio.CopyObjectArgs;
import io.minio.MinioClient;
import io.minio.RemoveObjectArgs;
import io.minio.GetObjectArgs;
import io.minio.ObjectWriteResponse;
import io.minio.UploadObjectArgs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.UUID;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;@Service
public class MinioService {@Autowiredprivate MinioClient minioClient;@Value("${minio.bucketName}")private String bucketName;// 将需要下载的文件放入临时文件夹并压缩下载public void downloadFolderAsZip(List<String> fileNames, HttpServletResponse response) {String tempFolderName = "temp-folder-" + UUID.randomUUID();  // 随机生成临时文件夹名称try {// 上传文件到临时文件夹for (String fileName : fileNames) {String objectName = tempFolderName + "/" + fileName;// 复制原始文件到临时文件夹minioClient.copyObject(CopyObjectArgs.builder().bucket(bucketName).object(objectName).source(bucketName + "/" + fileName).build());}// 设置响应头response.setContentType("application/zip");response.setHeader("Content-Disposition", "attachment; filename=download.zip");// 创建 ZIP 输出流try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) {for (String fileName : fileNames) {String objectName = tempFolderName + "/" + fileName;// 获取临时文件夹中的每个文件流try (InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build())) {// 写入 ZIP 条目zipOut.putNextEntry(new ZipEntry(fileName));byte[] buffer = new byte[1024];int length;while ((length = inputStream.read(buffer)) >= 0) {zipOut.write(buffer, 0, length);}zipOut.closeEntry();  // 结束条目写入}}zipOut.finish();  // 完成 ZIP 文件}// 下载完成后删除临时文件夹deleteFolder(tempFolderName);} catch (Exception e) {throw new RuntimeException("Error occurred while downloading folder as zip", e);}}// 删除指定文件夹及其内容private void deleteFolder(String folderName) {try {Iterable<Result<Item>> items = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).prefix(folderName + "/").recursive(true).build());for (Result<Item> itemResult : items) {Item item = itemResult.get();minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(item.objectName()).build());}} catch (Exception e) {throw new RuntimeException("Error occurred while deleting folder", e);}}
}
3. 创建控制器

控制器方法用于接受文件名列表并调用服务中的方法进行下载。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.util.List;@RestController
public class FileDownloadController {@Autowiredprivate MinioService minioService;@GetMapping("/download-zip")public void downloadZip(@RequestParam List<String> fileNames, HttpServletResponse response) {minioService.downloadFolderAsZip(fileNames, response);}
}
4. 测试

可以通过以下 GET 请求测试功能:

GET http://localhost:8080/download-zip?fileNames=file1.txt&fileNames=file2.jpg&fileNames=file3.pdf
注意事项
  • 异步清理:如果文件数量多或者体积大,删除文件夹可能会影响性能。可以考虑将删除操作异步处理。
  • 异常处理:添加异常处理逻辑,确保在复制、压缩、删除等环节处理各种可能的错误。

3、在minio指定的桶名下面生产一个临时文件夹

SpringBoot+minio实现多文件下载时在minio指定的桶名下面生产一个文件夹,将需要下载放到这个文件夹中,并把这个文件夹打成一个压缩包后进行下载,下载成功后保留压缩包信息存放到数据库并且删除这个文件夹

要实现此功能,需要将多个文件上传到一个临时文件夹,并将该文件夹压缩为一个 ZIP 文件,供客户端下载。在下载成功后,将压缩包信息存储到数据库,并删除临时文件夹的所有文件。

以下是实现步骤和代码:

  1. 创建 MinIO 文件夹:在 MinIO 的指定桶下创建一个临时文件夹,并将文件复制到该文件夹中。
  2. 打包下载:将文件夹打包为 ZIP 文件返回给客户端。
  3. 保存记录:将 ZIP 文件信息存储到数据库中。
  4. 清理临时文件夹:下载完成后,删除临时文件夹中的所有文件,但保留 ZIP 文件。
1. 配置 MinIO 客户端

application.properties 中添加 MinIO 和数据库的配置:

# MinIO 配置
minio.url=http://localhost:9000
minio.accessKey=your-access-key
minio.secretKey=your-secret-key
minio.bucketName=your-bucket# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/yourdb
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.jpa.hibernate.ddl-auto=update
2. 创建数据库实体类

创建一个实体类 ZipFileRecord 来保存压缩包信息:

import javax.persistence.*;
import java.time.LocalDateTime;@Entity
public class ZipFileRecord {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String fileName;private String filePath;private LocalDateTime createdTime;// Getters and Setters// ...
}
3. 创建存储库接口

创建一个 ZipFileRecordRepository,用于保存压缩包信息:

import org.springframework.data.jpa.repository.JpaRepository;public interface ZipFileRecordRepository extends JpaRepository<ZipFileRecord, Long> {
}
4. MinIO 服务实现

编写服务类 MinioService,完成文件夹创建、文件复制、打包下载、数据库保存和清理的逻辑。

import io.minio.*;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;@Service
public class MinioService {@Autowiredprivate MinioClient minioClient;@Autowiredprivate ZipFileRecordRepository zipFileRecordRepository;@Value("${minio.bucketName}")private String bucketName;public void downloadFolderAsZip(List<String> fileNames, HttpServletResponse response) {String tempFolderName = "temp-folder-" + UUID.randomUUID();  // 创建临时文件夹String zipFileName = "download-" + UUID.randomUUID() + ".zip";String zipFilePath = tempFolderName + "/" + zipFileName;try {// 复制文件到临时文件夹for (String fileName : fileNames) {String objectName = tempFolderName + "/" + fileName;minioClient.copyObject(CopyObjectArgs.builder().bucket(bucketName).object(objectName).source(bucketName + "/" + fileName).build());}// 设置响应头,下载压缩包response.setContentType("application/zip");response.setHeader("Content-Disposition", "attachment; filename=" + zipFileName);// 创建 ZIP 输出流try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) {for (String fileName : fileNames) {String objectName = tempFolderName + "/" + fileName;// 获取每个文件的输入流try (InputStream inputStream = minioClient.getObject(GetObjectArgs.
http://www.dt0577.cn/news/21018.html

相关文章:

  • 如何编写网站建设semikron
  • 做旅游网站毕设任务书南京网站推广公司
  • 校园门户网站青岛网络优化代理
  • 毛片做暧小视频在线观看网站旅游网站网页设计
  • php网站开发步骤免费发布软文广告推广平台
  • 998元网站建设优化竞价培训
  • 黄页哪个网站好域名解析在线查询
  • 在mac下安装wordpressseo网络推广报价
  • 网站建站收费seo公司培训课程
  • php网站授权免费seo网站诊断
  • 手机网站设计公司有哪些做推广网络
  • 五屏网站建设哪家有杭州seo推广排名稳定
  • 哪个网站科技新闻好新闻头条最新消息今天
  • 多少钱可以做网站舆情分析报告案例
  • 网站制作在哪里找电商运营的基本流程
  • 做任务免费领取东西的网站网页设计与制作用什么软件
  • 做网站需要跟客户了解什么软件北京做seo的公司
  • 广东网站开发建设厦门seo排名外包
  • 做珠宝网站价格多少微商已经被国家定为传销了
  • 乐都网站建设公司今日重大国际新闻
  • 如何在淘宝上接单网站建设网络域名
  • 佛山市平台购物网站制作公司宁波网站制作优化服务公司
  • 哪个网站上做ppt比较好看网络广告的特点
  • 商务网站需求说明书电商广告
  • 打开网站关联词有哪些小学
  • 凡科建站官网需要什么推广注册app赚钱平台
  • 网络建设网站正规的网店培训机构有哪些
  • 网站查询功能怎么做山西网络营销外包
  • vue做的网站大全海外网络专线
  • 武汉手机网站成都网站优化