import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
* @author chris
* @description: Amazon S3 工具类
* @date 2020/10/19
@Slf4j
public class AmazonS3Util {
private AmazonS3 amazonS3;
public static final String SEPARATOR = "/";
public AmazonS3Util(String accessKey, String secretKey, String endPoint) {
amazonS3 = loadClient(accessKey, secretKey, endPoint);
* 上传文件
* @param bucketName
* @param folderName
* @param file
public void uploadFileByFile(String bucketName, String folderName, MultipartFile file) {
try {
String originalFileName = file.getOriginalFilename();
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType(file.getContentType());
objectMetadata.setContentLength(file.getSize());
amazonS3.putObject(bucketName, folderName + SEPARATOR + originalFileName, file.getInputStream(), objectMetadata);
} catch (Exception e) {
log.error("", e);
* 上传文件
* @param bucketName
* @param folderName
* @param localFile
public void uploadFileByName(String bucketName, String folderName, String localFile) {
FileInputStream fis = null;
try {
File file = new File(localFile);
fis = new FileInputStream(localFile);
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(file.length());
final PutObjectRequest putRequest = new PutObjectRequest(bucketName, folderName + "/" + file.getName(), fis, objectMetadata);
amazonS3.putObject(putRequest);
} catch (Exception e) {
log.error("", e);
} finally {
try {
if (fis != null) {
fis.close();
} catch (IOException e) {
log.error("", e);
* 上传文件
* @param bucketName
* @param localFile
public void uploadFileByName(String bucketName, String localFile) {
FileInputStream fis = null;
try {
File file = new File(localFile);
fis = new FileInputStream(localFile);
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(file.length());
final PutObjectRequest putRequest = new PutObjectRequest(bucketName, file.getName(), fis, objectMetadata);
amazonS3.putObject(putRequest);
} catch (Exception e) {
log.error("", e);
} finally {
try {
if (fis != null) {
fis.close();
} catch (IOException e) {
log.error("", e);
* 获取文件列表
* @param bucketName
* @param folderName
* @return
* @throws Exception
public List<S3ObjectSummary> getFileList(String bucketName, String folderName) throws Exception {
final ListObjectsRequest listRequest = new ListObjectsRequest(bucketName, folderName + SEPARATOR, null, SEPARATOR, null);
ObjectListing objectList = amazonS3.listObjects(listRequest);
return objectList.getObjectSummaries();
* 获取文件列表
* @param bucketName
* @param folderName
* @return
* @throws Exception
public List<String> getFileNameList(String bucketName, String folderName) throws Exception {
List<String> fileNameList = new ArrayList<String>();
List<S3ObjectSummary> s3ObjectList = getFileList(bucketName, folderName);
for (S3ObjectSummary s3Object : s3ObjectList) {
String key = s3Object.getKey();
if (key != null) {
String fileName = key.substring(key.indexOf(folderName + SEPARATOR) + (folderName + SEPARATOR).length());
fileNameList.add(fileName);
return fileNameList;
* 获取文件列表
* @param bucketName
* @return
* @throws Exception
public List<S3ObjectSummary> getFileList(String bucketName) throws Exception {
ListObjectsRequest listRequest = new ListObjectsRequest();
listRequest.setBucketName(bucketName);
listRequest.setMaxKeys(50);
ObjectListing objectList = amazonS3.listObjects(listRequest);
return objectList.getObjectSummaries();
* 获取文件列表
* @param bucketName
* @return
* @throws Exception
public List<String> getFileNameList(String bucketName) throws Exception {
List<String> fileNameList = new ArrayList<String>();
List<S3ObjectSummary> s3ObjectList = getFileList(bucketName);
for (S3ObjectSummary s3Object : s3ObjectList) {
String key = s3Object.getKey();
if (key != null) {
fileNameList.add(key);
return fileNameList;
* 判断文件是否存在
* @param bucketName
* @param fileName
* @return
public boolean isFileExist(String bucketName, String fileName) {
return amazonS3.doesObjectExist(bucketName, fileName);
* Amazon S3 客户端设置
* @param accessKey
* @param secretKey
* @param endPoint
* @return
private AmazonS3 loadClient(String accessKey, String secretKey, String endPoint) {
log.info("start create s3Client");
AwsClientBuilder.EndpointConfiguration endpointConfig =
new AwsClientBuilder.EndpointConfiguration(endPoint, Region.getRegion(Regions.US_EAST_1).getName());
AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
AWSCredentialsProvider awsCredentialsProvider = new AWSStaticCredentialsProvider(awsCredentials);
ClientConfiguration clientConfig = new ClientConfiguration();
clientConfig.setProtocol(Protocol.HTTPS);
AmazonS3 s3Client = AmazonS3Client.builder()
.withEndpointConfiguration(endpointConfig)
.withClientConfiguration(clientConfig)
.withCredentials(awsCredentialsProvider)
.disableChunkedEncoding()
.withPathStyleAccessEnabled(true)
.withForceGlobalBucketAccessEnabled(true)
.build();
log.info("create s3Client success");