Amazon S3 工具类

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");