Bucket

上傳物件

Bucket 簡單說明及自身經驗

參考資料:官方文件

首先這邊主要的問題是aws-java-sdk 這包太大,這個問題還是要想辦法解決,目前在想辦法。

// 使用 AWS S3 SDK
// https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk
implementation 'com.amazonaws:aws-java-sdk:1.12.211'

Config

@Configuration
public class AWSS3Config {

	@Value("${custom.aws.accessKey}")
	private String accessKey;

	@Value("${custom.aws.secretKey}")
	private String secretKey;

	@Value("${custom.aws.area}")
	private String area;


	@Bean
	public AmazonS3 createAWSS3Client() {
		AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);

		//set-up the client
		AmazonS3 s3client = AmazonS3ClientBuilder
				.standard()
				.withCredentials(new AWSStaticCredentialsProvider(credentials))
				.withRegion(Regions.fromName(area))
				.build();

		return s3client;
	}
}

Service

@Service
@RequiredArgsConstructor
public class AWSS3StorageService {

	@Value("${custom.aws.bucketName}")
	private String bucketName;

	@Value("${custom.aws.baseFolder}")
	private String baseFolder;

	@Value("${custom.aws.area}")
	private String area;


	private final AmazonS3 s3client;

	public String getObjectKey(String key){
		return baseFolder + "/" + key;
	}

	public String getAWSPath(String key){
		return "https://" + this.bucketName + ".s3." + area +".amazonaws.com/" + baseFolder + "/" + key;
	}

	//is bucket exist?
	public boolean doesBucketExist(String bucketName) {
		return s3client.doesBucketExistV2(bucketName);
	}

	//create a bucket
	public Bucket createBucket(String bucketName) {
		return s3client.createBucket(bucketName);
	}

	//list all buckets
	public List<Bucket> listBuckets() {
		return s3client.listBuckets();
	}

	//delete a bucket
	public void deleteBucket(String bucketName) {
		s3client.deleteBucket(bucketName);
	}

	//uploading object
	public PutObjectResult putObject(String bucketName, String key, File file) {
		return s3client.putObject(bucketName, baseFolder + "/" + key, file);
	}
	public PutObjectResult putObject(String key, File file) {
		return s3client.putObject(this.bucketName, baseFolder + "/" + key, file);
	}

	//uploading object from inputStream
	public PutObjectResult putObject(String key, InputStream input, String contentType) {
		ObjectMetadata metadata = new ObjectMetadata();
		metadata.setContentType(contentType);
		return s3client.putObject(this.bucketName, baseFolder + "/" + key, input, metadata);
	}

	//listing objects
	public ObjectListing listObjects(String bucketName) {
		return s3client.listObjects(bucketName);
	}

	//get an object
	public S3Object getObject(String bucketName, String objectKey) {
		return s3client.getObject(bucketName, baseFolder + "/" + objectKey);
	}

	//copying an object
	public CopyObjectResult copyObject(String sourceBucketName, String sourceKey,
									   String destinationBucketName, String destinationKey) {
		return s3client.copyObject(sourceBucketName, sourceKey,
										destinationBucketName, destinationKey);
	}

	//deleting an object
	public void deleteObject(String bucketName, String objectKey) {
		s3client.deleteObject(bucketName, baseFolder + "/" + objectKey);
	}

	//deleting an object
	public void deleteObject(String objectKey) {
		deleteObject(this.bucketName, baseFolder + "/" + objectKey);
	}

	//deleting multiple Objects
	public DeleteObjectsResult deleteObjects(DeleteObjectsRequest delObjReq) {
		return s3client.deleteObjects(delObjReq);
	}
}

Last updated