AWS

S3 File Upload MultipartFile

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>

cs



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