package com.hotent.file.model; import com.amazonaws.ClientConfiguration; import com.amazonaws.Protocol; import com.amazonaws.SDKGlobalConfiguration; import com.amazonaws.auth.AWSCredentials; 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 org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AwsConfig { @Value("${aws.accessKey:null}") private String accessKey; @Value("${aws.secretKey:null}") private String secretKey; @Value("${aws.region:null}") private String region; @Value("${aws.uploadDir:null}") private String uploadDir; @Value("${aws.hostName:null}") private String hostName; @Bean public AmazonS3 getAmazonS3() { //忽略证书属性 System.setProperty(SDKGlobalConfiguration.DISABLE_CERT_CHECKING_SYSTEM_PROPERTY,"true"); AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey); ClientConfiguration baseOpts = new ClientConfiguration(); baseOpts.setSignerOverride("S3SignerType"); baseOpts.setProtocol(Protocol.HTTPS); return AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(awsCredentials)) // 如果有endpoint,可以用这个,这个和withRegion(Region)不能一起使用 .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(hostName, region)) // 如果配置了S3域名,就需要加这个进行路径访问,要不然会报AccessKey不存在的问题 .withPathStyleAccessEnabled(true) .withClientConfiguration(baseOpts) .build(); } public String getUploadDir() { return uploadDir; } public void setUploadDir(String uploadDir) { this.uploadDir = uploadDir; } }