Spring Boot 애플리케이션을 사용하여 AWS S3와 상호 작용
11353 단어 javaprogrammingawsspringboot
스토리지와 같은 클라우드 컴퓨팅 서비스의 인기가 높아짐에 따라 다행스럽게도 더 이상 이 모든 것에 대해 걱정할 필요가 없습니다. AWS Simple Storage Service(S3)는 데이터 스토리지 문제를 해결하는 데 사용할 수 있는 널리 사용되는 서비스 중 하나입니다.
AWS S3 소개:
Amazon S3(Simple Storage Service)는 데이터 및 애플리케이션 프로그램의 온라인 백업 및 보관을 위해 설계된 확장 가능한 고속 저비용 웹 기반 서비스입니다. 최대 5TB 크기의 모든 유형의 파일을 업로드, 저장 및 다운로드할 수 있습니다. 구독자는 데이터의 액세스 가능성, 즉 비공개/공개 액세스를 제어할 수 있습니다.
AWS는 객체를 프로그래밍 방식으로 관리하기 위한 SDK를 제공합니다. 시작하는 단계를 살펴보겠습니다.
이것으로 AWS S3 버킷에 대한 설정이 충분합니다. 이 기사의 Spring 부트 부분으로 이동하여 일부 코딩을 직접 해봅시다.
Spring Initiliazr 플러그인 및 Maven을 빌드 도구로 사용하여 이 프로젝트에 IntelliJ IDEA를 사용할 것입니다.
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.239</version>
</dependency>
AWS S3 클라이언트로 애플리케이션을 인증합니다.
구성 등급:
package com.springbootstorage.awss3.configuration;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class S3ClientConfiguration {
@Value("${access.key.id}")
@Getter
private String accessKeyId;
@Value("${access.key.secret}")
@Getter
private String accessKeSecret;
@Value("${s3.region.name}")
@Getter
private String bucketRegion;
@Bean
public AmazonS3 getAwsS3Client() {
BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(accessKeyId, accessKeSecret);
return AmazonS3ClientBuilder
.standard()
.withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials))
.withRegion(bucketRegion)
.build();
}
}
서비스 클래스:
package com.springbootstorage.awss3.service;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.*;
import lombok.Data;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Data
@Service
public class S3FileService {
@Value("${s3.bucket.name}")
private String s3BucketName;
private final String DOWNLOAD_PATH = "D:\\S3Download\\";
private final String UPLOAD_PATH = "E:\\";
@Autowired
private AmazonS3 amazonS3;
// List all objects in the bucket
public List<String> listAllObjects(String s3BucketName) {
List<String> listOfObjects = new ArrayList<>();
ObjectListing objectListing = amazonS3.listObjects(s3BucketName);
for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
listOfObjects.add("FileName: " + objectSummary.getKey() +
" | " + "LastModified: " + objectSummary.getLastModified() +
" | " + "Size: " + objectSummary.getSize());
}
return listOfObjects;
}
// Downloading object from the bucket
public String downloadObject(String s3BucketName, String objectName) {
S3Object s3Object = amazonS3.getObject(s3BucketName, objectName);
S3ObjectInputStream inputStream = s3Object.getObjectContent();
try {
FileUtils.copyInputStreamToFile(inputStream, new File( DOWNLOAD_PATH + objectName));
return DOWNLOAD_PATH + objectName + " Downloaded Successfully!";
} catch (IOException e) {
throw new RuntimeException(e);
}
}
// Upload object to the bucket
public PutObjectResult uploadObject(String s3BucketName, String objectName, File objectToUpload) {
return amazonS3.putObject(s3BucketName, objectName, objectToUpload);
}
public void deleteObject(String bucketName, String objectName) {
amazonS3.deleteObject(bucketName, objectName);
}
}
컨트롤러 클래스:
package com.springbootstorage.awss3.controller;
import com.amazonaws.services.s3.model.PutObjectResult;
import com.springbootstorage.awss3.service.S3FileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.File;
import java.util.List;
@RestController
@RequestMapping("/api/v1")
public class S3Controller {
@Autowired
private S3FileService s3FileService;
// List all files in the bucket
@GetMapping("/listAllFiles")
public String listAllFilesInBucket() {
List<String> files = s3FileService.listAllObjects(s3FileService.getS3BucketName());
StringBuilder allFiles = new StringBuilder();
allFiles.append("****************************************\n");
allFiles.append("List of Files available in bucket ").append(s3FileService.getS3BucketName());
allFiles.append("\n****************************************\n");
for (String filename : files)
allFiles.append(files).append("\n");
return allFiles.toString();
}
@PostMapping("/upload/{fileToUpload}")
public PutObjectResult uploadFiletoBucket(@PathVariable String fileToUpload) {
return s3FileService.uploadObject(s3FileService.getS3BucketName(), fileToUpload, new File(s3FileService.getUPLOAD_PATH()+ fileToUpload));
}
@PostMapping("/download/{fileToDownload}")
public String downloadFileFromBucket(@PathVariable String fileToDownload) {
return s3FileService.downloadObject(s3FileService.getS3BucketName(), fileToDownload);
}
@PostMapping("/delete/{fileToDelete}")
public String deleteFileFromBucket(@PathVariable String fileToDelete) {
s3FileService.deleteObject(s3FileService.getS3BucketName(), fileToDelete);
return fileToDelete + " has been deleted successfully from " + s3FileService.getS3BucketName();
}
}
이제 Spring 부트 애플리케이션을 시작하고 S3 버킷에서 객체를 나열, 업로드, 다운로드 및 삭제하기 위해 이 API를 테스트해 보겠습니다.
이러한 작업을 수행하기 위한 엔드포인트는 4개 미만입니다.
http://localhost:9090/api/v1/listAllFiles
http://localhost:9090/api/v1/upload/
http://localhost:9090/api/v1/download/
http://localhost:9090/api/v1/delete/
curl -XPOST http://localhost:9090/api/v1/upload/sample1.jpg
curl -XPOST http://localhost:9090/api/v1/upload/sample2.jpg
curl -XPOST http://localhost:9090/api/v1/upload/employees.json
curl http://localhost:9090/api/v1/listAllFiles
curl -XPOST http://localhost:9090/api/v1/download/employees.json
curl -XPOST http://localhost:9090/api/v1/delete/employees.json
프로그래밍 방식으로 버킷 생성/삭제를 관리할 수도 있습니다. 이에 대한 더 많은 예를 확인하십시오link.
아래 주어진 GitHub 리포지토리에서 이 프로젝트의 코드를 찾을 수 있습니다.
https://github.com/devanandukalkar/SpringBootAwsS3
그게 다야. 즐겁게 읽으셨기를 바랍니다. 계속 배우도록!! 건배!
Reference
이 문제에 관하여(Spring Boot 애플리케이션을 사용하여 AWS S3와 상호 작용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/devanandukalkar/storing-objects-to-aws-s3-with-spring-boot-1h13텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)