使用亚马逊 S3 协议访问对象存储
[s3-API](https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/API/API_Operations_Amazon_Simple_Storage_Service.html)
- 兼容S3协议的对象存储有
- minio
- 似乎是完全兼容 [兼容文档](https://www.minio.org.cn/product/s3-compatibility.html)
- 阿里云oss
- [兼容主要的 API ](https://help.aliyun.com/zh/oss/developer-reference/compatibility-with-amazon-s3?spm=a2c4g.11186623.0.0.590b32bcHb4D6a)
- 七牛云oss
- 等等
依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--使用的依赖-->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.522</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
</dependencies>
读取配置
package com.xx.awss3demo.config;
import lombok.Data;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@ConfigurationProperties(prefix = "s3")
@Component
public class S3Properties {
/**
* 对象存储服务的URL
*/
private String endpoint;
/**
* path-style nginx 反向代理和S3默认支持
* 模式 {http://bucketname.endpoint} -- true
* 模式 {http://endpoint/bucketname} -- false
*/
private Boolean pathStyleAccess = false;
/**
* 区域
*/
private String region;
/**
* Access key就像用户ID,可以唯一标识你的账户
*/
private String accessKey;
/**
* Secret key是你账户的密码
*/
private String secretKey;
/**
* 最大线程数,默认: 100
*/
private Integer maxConnections = 50;
}
配置文件
server:
port: 8888
s3:
# aliyun oss
#endpoint: http://oss-cn-shanghai.aliyuncs.com
#accessKey:
#secretKey:
# minio
endpoint: http://192.168.1.1:9000
accessKey: admin
secretKey: admin1234
bucketName: lqs3bucket
region:
maxConnections: 100
文件操作
package com.xx.awss3demo.service;
import com.amazonaws.ClientConfiguration;
import com.amazonaws.ClientConfigurationFactory;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import com.amazonaws.util.IOUtils;
import com.liuqi.awss3demo.config.S3Properties;
import lombok.SneakyThrows;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import java.io.*;
import java.net.URL;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@ConditionalOnClass(S3Properties.clas

本文介绍了如何使用SpringBoot和AWSSDK在Java项目中配置和操作兼容AmazonS3协议的对象存储服务,如Minio、阿里云OSS和七牛云OSS,包括创建bucket、上传下载文件、分段上传等操作。

2512

被折叠的 条评论
为什么被折叠?



