package com.xinyan.mp.quality.manager;
import cn.hutool.core.util.StrUtil;
import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Slf4j
@Component
public class FileManager {
@Value("${aws.bucket}")
private String awsBucket;
@Value("${aws.accessKey}")
private String accessKey;
@Value("${aws.secretKey}")
private String secretKey;
@Value("${aws.url}")
private String url;
private AmazonS3 amazonS3Client;
@PostConstruct
public void init() {
ClientConfiguration clientConfig = new ClientConfiguration();
clientConfig.setProtocol(Protocol.HTTP);
amazonS3Client = AmazonS3ClientBuilder.standard().withCredentials(
new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))).
withClientConfiguration(clientConfig).
withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration(url, Regions.DEFAULT_REGION.getName())).
build();
}
public String upload(File file, String fileName) throws FileNotFoundException {
String fileDirName = awsBucket + "/xxxxx/" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
amazonS3Client.putObject(fileDirName, fileName, new FileInputStream(file), new ObjectMetadata());
amazonS3Client.setObjectAcl(fileDirName, fileName, CannedAccessControlList.PublicReadWrite);
boolean delete = file.delete();
log.info("删除临时文件:【{}】 状态:{},", file.getAbsolutePath(), delete);
return amazonS3Client.getUrl(fileDirName, fileName).toString();
}
public void delete(String path) {
String str = path.substring(path.indexOf(awsBucket));
String bucketName = StrUtil.sub(str, 0, str.lastIndexOf("/"));
String key = StrUtil.sub(str, str.lastIndexOf("/") + 1, str.length());
amazonS3Client.deleteObject(bucketName, key);
}
public InputStream download(String path) {
String str = path.substring(path.indexOf(awsBucket));
String bucketName = StrUtil.sub(str, 0, str.lastIndexOf("/"));
String key = StrUtil.sub(str, str.lastIndexOf("/") + 1, str.length());
S3Object s3Object = amazonS3Client.getObject(bucketName, key);
return s3Object.getObjectContent();
}
}