/**
* Title: S3Manager
* Description: Ceph储存的s3接口实现,参考文档:
*https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/RetrievingObjectUsingJava.html*http://docs.ceph.org.cn/radosgw/s3/* author: xu jun
* date: 2018/10/22*/@Slf4j
@Servicepublic classS3Manager extends StorageManagerBase implements StorageManager {privatefinal UKID ukid;privatefinal S3ClientConfig s3ClientConfig;privatefinal RedisManage redisManage;privateAmazonS3 amazonClient;
@AutowiredpublicS3Manager(UKID ukid, S3ClientConfig s3ClientConfig, RedisManage redisManage) {this.ukid =ukid;this.s3ClientConfig =s3ClientConfig;this.redisManage =redisManage;
}privateAmazonS3 getAmazonClient() {if (amazonClient == null) {
String accessKey=s3ClientConfig.getAccessKey();
String secretKey=s3ClientConfig.getSecretKey();
String endpoint=s3ClientConfig.getEndPoint();
AWSCredentials credentials= newBasicAWSCredentials(accessKey, secretKey);
ClientConfiguration clientConfig= newClientConfiguration();
clientConfig.setProtocol(Protocol.HTTP);
AmazonS3 conn=AmazonS3ClientBuilder.standard()
.withClientConfiguration(clientConfig)
.withCredentials(newAWSStaticCredentialsProvider(credentials))
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpoint, ""))
.withPathStyleAccessEnabled(true)
.build();//检查储存空间是否创建
checkBucket(conn);
amazonClient=conn;
}returnamazonClient;
}
@Overridepublic String uploadFile(byte[] fileData, String extension) {
log.info("Storage s3 api, upload file start");//生成上传文件的随机序号
long fileId =ukid.getGeneratorID();
String fileName=Long.toString(fileId);//储存空间名
String bucketName =s3ClientConfig.getBucketName();
AmazonS3 conn=getAmazonClient();
PutObjectResult result= conn.putObject(bucketName, fileName, new Byt