🔥
Caster 開發日誌
  • Java
    • JVM Performance Tool
      • Java Debug Wire Protocol (JDWP) 的詳細介紹
      • JConsole 詳細介紹
    • Spring Boot
      • Spring Security
      • Spring Boot Admin
      • Spring Event
      • Spring AOP
      • Spring Boot JUnit 5
      • Apache Dubbo
    • Reflect 應用
    • ELK + F 建構
    • Socket.IO
    • OCR - 光學字元辨識
    • 讀取JAR resource文件
    • LocalTime & MySQL時間精度
    • Gradle multi module
    • MyBatis-Plus
    • Java Date operation
    • Java IP to Long
    • Apache Commons lang3 應用
      • Function 應用
    • Cloud Platform
      • Amazon S3
        • SDK V1
          • Bucket
        • SDK V2
          • Bucket
      • Google Cloud Platform
      • Azure Cloud
        • Storage
      • OVHcloud
        • Config
    • SSL/TLS工具
    • Util 工具
      • Jackson Json工具
      • Charles應用
      • JMeter – Performing Distributed Load Testing with Docker
    • Redis
      • Stream
      • Redisson 分布式鎖機制
      • Create Redis Cluster Using Docker
      • List Operations
    • Java 8
      • method & constructor Reference
      • CompletableFuture
      • FunctionInterface
      • Stream 應用
      • 繁簡轉換 - 簡易調整
    • MySQL
      • 建立測試用 流水號Table
      • SQL 效能調校 - Explain
      • SQL 效能調校 - Partition
      • 排程 - Event
    • Apache ShardingSphere
  • Kubernetes
    • 初入江湖(K8S)
    • 零中斷服務滾動更新
    • Kubernetes DNS
    • Ingress & Ingress Controller 教學
    • Ingress TLS Easy setup
  • 指令集
  • Telegram
  • SourceTree
    • 踩坑紀錄(ㄧ) - Git Flow
    • 踩坑紀錄(二) - 修改檔名
  • 專案統計
    • Robot
    • Recharge
  • GitHub
    • Actions
  • GitLab
    • 介紹 GitLab
    • 使用 Docker 自架 GitLab
    • 簡介 GitLab CI/CD
      • GitLab Runner 詳細介紹與設定方式
Powered by GitBook
On this page
  • Bucket 簡單說明及自身經驗
  • Config
  • Service
  1. Java
  2. Cloud Platform
  3. Amazon S3
  4. SDK V1

Bucket

上傳物件

PreviousSDK V1NextSDK V2

Last updated 2 years ago

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);
	}
}
官方文件