Springboot实现分片上传,分片下载(断点下载)

本文实现断点续传,分片下载,废话不多说,接下来带大家分步实现

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.6</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>springboot-file-senior-operate</groupId>
	<artifactId>springboot-file-senior-operate-demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.71</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-collections4</artifactId>
			<version>4.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.11.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
			<version>2.10.0</version>
		</dependency>
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.15</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>
		<!-- 做断点下载使用-->
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpcore</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

resources/application.yml

server:
  port: 8080
  
spring:
  servlet:
   multipart:
    enabled: false

file:
 upload-path: D:\upload
 download-path: D:\download
 download-file:D:\文件路径+文件名

resources/logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--控制台输出-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5level] [%-5thread] %logger{20} - %msg%n</pattern>
        </encoder>
    </appender>


    <appender name="FILE" class
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot实现MinIO文件服务器的分片上传断点续传,可以使用MinIO Java SDK提供的API和Spring Boot提供的Multipart File上传功能。具体实现步骤如下: 1. 引入MinIO Java SDK和Spring Boot的依赖 ```xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.0.4</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 2. 配置MinIO客户端 在Spring Boot的配置文件中,配置MinIO客户端的连接信息。 ```yaml minio: endpoint: minio.example.com access-key: ACCESS_KEY secret-key: SECRET_KEY secure: false ``` 3. 初始化Multipart上传上传大文件之前,使用 `InitiateMultipartUpload` API 方法初始化一个Multipart上传会话,并获取一个上传ID。上传ID用于标识一个Multipart上传会话。 ```java import io.minio.MinioClient; import io.minio.errors.MinioException; import io.minio.messages.Part; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.ArrayList; import java.util.List; @Service public class MinioService { @Autowired private MinioClient minioClient; @Value("${minio.bucket-name}") private String bucketName; public String initiateMultipartUpload(String objectName) throws MinioException { String uploadId = minioClient.initiateMultipartUpload(bucketName, objectName).uploadId(); return uploadId; } } ``` 4. 上传文件块 将大文件分成多个小块,每个小块的大小可以根据需求自定义。使用 `UploadPart` API 方法将每个小块独立上传上传时需要指定上传的文件名、块编号、块大小以及上传ID等信息。 ```java public class MinioService { // ... public List<Part> uploadParts(String objectName, String uploadId, MultipartFile file, int partSize) throws IOException, MinioException { List<Part> parts = new ArrayList<>(); int partNumber = 1; byte[] buffer = new byte[partSize]; while (true) { int bytesRead = file.getInputStream().read(buffer); if (bytesRead < 0) { break; } byte[] partData = new byte[bytesRead]; System.arraycopy(buffer, 0, partData, 0, bytesRead); Part part = minioClient.uploadPart( bucketName, objectName, partNumber, uploadId, partData, bytesRead); parts.add(part); partNumber++; } return parts; } } ``` 5. 完成Multipart上传 上传所有文件块后,使用 `CompleteMultipartUpload` API 方法将它们合并成一个完整的文件,最终得到上传的文件。 ```java public class MinioService { // ... public void completeMultipartUpload(String objectName, String uploadId, List<Part> parts) throws MinioException { minioClient.completeMultipartUpload(bucketName, objectName, uploadId, parts); } } ``` 6. 断点续传 如果上传中断,可以使用 `ListParts` API 方法获取已上传的文件块信息,然后从中断处继续上传。 ```java public class MinioService { // ... public List<Part> listParts(String objectName, String uploadId) throws MinioException { return minioClient.listParts(bucketName, objectName, uploadId).getParts(); } } ``` 使用Spring Boot的Multipart File上传功能上传文件时,需要在Controller中添加 `@RequestParam("file") MultipartFile file` 注解,自动将文件转换为MultipartFile类型。 ```java @RestController @RequestMapping("/file") public class FileController { @Autowired private MinioService minioService; @PostMapping("/upload") public void uploadFile(@RequestParam("file") MultipartFile file) throws IOException, MinioException { // 获取文件名和文件大小 String fileName = file.getOriginalFilename(); long fileSize = file.getSize(); // 定义块大小(5MB) int partSize = 5 * 1024 * 1024; // 初始化Multipart上传会话 String uploadId = minioService.initiateMultipartUpload(fileName); // 上传文件块 List<Part> parts = minioService.uploadParts(fileName, uploadId, file, partSize); // 完成Multipart上传 minioService.completeMultipartUpload(fileName, uploadId, parts); } @PostMapping("/resume") public void resumeUpload(@RequestParam("file") MultipartFile file, String objectName, String uploadId) throws IOException, MinioException { // 获取已上传的文件块信息 List<Part> parts = minioService.listParts(objectName, uploadId); // 上传文件块 parts = minioService.uploadParts(objectName, uploadId, file, partSize); // 完成Multipart上传 minioService.completeMultipartUpload(objectName, uploadId, parts); } } ``` 以上是使用Spring Boot实现MinIO文件服务器的分片上传断点续传的基本步骤,具体实现还需要根据实际需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值