AwsS3.java
package com.example.demo;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CopyObjectRequest;
import com.amazonaws.services.s3.model.DeleteObjectRequest;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import org.springframework.stereotype.Service;
@Service
public class AwsS3 {
//Amazon-s3-sdk
private AmazonS3 s3Client;
final private String accessKey = "AKIXXXXXXXXXXXXXXXXX"; //"IAM에서 발급받은 accessKey"
final private String secretKey = "p4MHrXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // "IAM에서 발급받은 secretKey"
private Regions clientRegion = Regions.AP_NORTHEAST_2; // region
private String bucket = "sample-pslab-bucket";
private AwsS3() {
createS3Client();
}
//singleton pattern
static private AwsS3 instance = null;
public static AwsS3 getInstance() {
if (instance == null) {
return new AwsS3();
} else {
return instance;
}
}
//aws S3 client 생성
private void createS3Client() {
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
this.s3Client = AmazonS3ClientBuilder
.standard()
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.withRegion(clientRegion)
.build();
}
public void uploadContents(String contents , String s3Path) {
try
{
byte[] contentAsBytes = contents.getBytes("UTF-8");
ByteArrayInputStream contentsAsStream = new ByteArrayInputStream(contentAsBytes);
ObjectMetadata md = new ObjectMetadata();
md.setContentLength(contentAsBytes.length);
this.s3Client.putObject(new PutObjectRequest(this.bucket, s3Path, contentsAsStream, md));
}
catch(AmazonServiceException e)
{
e.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
OkHttpSample.java(동기)
package com.example.demo;
import org.springframework.stereotype.Service;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
@Service
public class OkHttpSample {
// get TEST
public String callGET(){
System.out.println("[callGET]");
String responseString = null;
try {
// 인스턴스 생성
OkHttpClient client = new OkHttpClient();
// URL
String strURL = "https://dummy.restapiexample.com/api/v1/employees";
// GET요청을 위한 build 작업.
Request.Builder builder = new Request.Builder().url(strURL).get();
// json을 주고받는 경우, 헤더에 추가.
builder.addHeader("Content-type", "application/json");
// request 객체 생성.
Request request = builder.build();
// request를 요청하고 그 결과를 response 객체로 응답 받음.
Response response = client.newCall(request).execute();
// 응답처리
if (response.isSuccessful()) {
ResponseBody body = response.body();
responseString = body.string();
System.out.println("[callGET responseBody]:" + responseString);
body.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return responseString;
}
// post TEST
public String callPOST() {
System.out.println("[callPOST]");
String responseString = null;
try {
// 인스턴스를 생성.
OkHttpClient client = new OkHttpClient();
// URL
String strURL = "https://dummy.restapiexample.com/api/v1/create";
// parameter를 JSON object로 전달
String strBody = "{\"name\":\"test\",\"salary\":\"123\",\"age\":\"23\"}";
// POST요청을 위한 request body를 구성.
RequestBody requestBody = RequestBody.Companion.create(strBody, MediaType.get("application/json; charset=utf-8"));
// POST요청을 위한 build작업
Request.Builder builder = new Request.Builder().url(strURL).post(requestBody);
// json을 주고받는 경우, 헤더에 추가
builder.addHeader("Content-type", "application/json");
// request 객체를 생성
Request request = builder.build();
// request를 요청하고 그 결과를 response 객체로 응답을 받음.
Response response = client.newCall(request).execute();
// 응답처리
if (response.isSuccessful()) {
ResponseBody body = response.body();
responseString = body.string();
System.out.println("[callPOST responseBody]:" + responseString);
body.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return responseString;
}
}
DemoApplication.java (@SpringBootApplication)
package com.example.demo;
import java.io.File;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication implements CommandLineRunner{
@Autowired
private AwsS3 awsS3;
@Autowired
private OkHttpSample okHttpSample;
@Autowired
private OkHttpAsyncSample okHttpAsyncSample;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
okHttpsTest();
}
public void okHttpsTest() {
String getResponseString = okHttpSample.callGET();
s3ContentsUploadTest(getResponseString , "getTest");
String postResponseString = okHttpSample.callPOST();
s3ContentsUploadTest(postResponseString , "postTest");
}
public void s3ContentsUploadTest(String contents , String fileName) {
String s3Path = "javatest/"+fileName; // S3에 저장될 경로 및 파일 이름
awsS3.uploadContents(contents, s3Path);
}
}
테스트 결과

[참고]
'Spring Boot' 카테고리의 다른 글
| [Spring Boot] Lombok 오류 (0) | 2022.08.31 |
|---|---|
| [Spring Boot] OkHttp REST Client (0) | 2022.07.11 |
| [Spring Boot] AWS S3에 파일 업로드,복사,삭제하기 (0) | 2022.07.11 |