AWS/S3

JAVA 에서 S3 연동하기..

UKkim 2019. 8. 14. 16:04

# JAVA로 이미지 파일 S3로 보내는 방법.

 

# AWSCredentials 에 accesskey와 secretkey 를 입력하고 AmazonS3 클래스를 생성한다. 

# s3 버킷 이름을 설정한다.

# PutObjectRequest 에 담고 Upload 실시.

 

# 체크 사항. 

  - 이미지 파일의 경우 metadata.setContentType 에서 "image/*" 로 해도 되지만 "image/jpeg" 로 해야 URL로 파일을 바로 볼 수 있다. "image/*" 의 경우 URL 호출시 파일을 다운로드 받아버린다.

  - 위 세팅을 함으로써 추후 이미지 태그에 S3 URL을 입력하는 것 만으로 이미지를 표출할 수 있다.

 

public int s3Upload(MultipartFile file, String fname) {
		AmazonS3 amazonS3 = null;
		String bucket = null;
		
		AWSCredentials creds = new BasicAWSCredentials("accesskey", "secretkey");
		amazonS3 = 
				AmazonS3ClientBuilder.standard()
					.withCredentials(new AWSStaticCredentialsProvider(creds))
					.withRegion(Regions.AP_NORTHEAST_2)       // region
					.withForceGlobalBucketAccessEnabled(true) // access
					.build();
		bucket = "bucket-name";
		TransferManager tm = TransferManagerBuilder.standard().withS3Client(amazonS3).build();
		PutObjectRequest request;
		try {
			ObjectMetadata metadata = new ObjectMetadata();
			metadata.setCacheControl("604800"); // 60*60*24*7 일주일
			metadata.setContentType("image/jpeg");
			request = new PutObjectRequest(bucket, fname, file.getInputStream(), metadata)
					.withCannedAcl(CannedAccessControlList.PublicRead);
			//amazonS3.putObject(request);
			Upload upload = tm.upload(request);
			upload.waitForCompletion();
			return 1;
		} catch (Exception e) {
			//TODO Auto-generated catch block
			e.printStackTrace();
			return -1;
		}
	}