AWS S3는 file을 저장하고 관리하는 데이터를 안전하게 보관할 수 있는 스토리지 서비스입니다. S3에서는 Burket이라고 하는 이름으로 스토리지를 관리하고 접근하게 되고 AWS SDK를 이용해서 file upload download 를 하게 됩니다. S3에서는 file 하나하나를 객체로 접근합니다.
Maven 프로젝트를 기준으로 dependency 설정을 하여 SDK를 다운받아야 합니다.
1 2 3 4 5 | <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>1.11.106</version> </dependency> |
S3에 접근하기 위해서 접근권한이 필요합니다.
IAM에서 User 생성을 하고
add permissions로 S3관련된 권한을 줍니다. security credentials 탭에서 create access key로 액세스 키를 생성합니다.
파일업로드를 하기 위한 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import java.io.InputStream; import com.amazonaws.AmazonClientException; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.PutObjectRequest; public class UploadObject { private static final String BURKETNAME = "burket name"; private static final String ACCESS_KEY = "access key"; private static final String SECRET_KEY = "secret key"; private AmazonS3 amazonS3; @SuppressWarnings("deprecation") public UploadObject(){ AWSCredentials awsCredentials = new BasicAWSCredentials(ACCESS_KEY,SECRET_KEY); amazonS3 = new AmazonS3Client(awsCredentials); } public void upload(String keyName, InputStream inputStream,ObjectMetadata metadata){ if(amazonS3!=null) try{ amazonS3.putObject(new PutObjectRequest(BURKETNAME,keyName,inputStream,metadata)); }catch(AmazonClientException ace){ ace.printStackTrace(); } finally { amazonS3 = null; } } } | cs |
multipartfile로 업로드를 하기 위해 InputStream을 인자로 받는 putobjectrequest 사용하였습니다. file로 하고 싶으면 overload된 다른 생성자를 사용하시면 됩니다.
1 2 3 4 | ObjectMetadata metadata = new ObjectMetadata(); UploadObject uploadObject = new UploadObject(); uploadObject.upload(storedFileName, multipartFile.getInputStream(),metadata); | cs |