IT TIP

Amazon S3에 일괄 업로드를 수행 할 수 있습니까?

itqueen 2020. 12. 12. 12:51
반응형

Amazon S3에 일괄 업로드를 수행 할 수 있습니까?


Amazon S3는 일괄 업로드를 지원합니까? 나는 매일 밤 최대 100K 파일을 업로드해야하는 작업이 있는데, 최대 1G까지 가능하지만 작은 파일로 치우쳐 있습니다 (90 %는 100 바이트 미만이고 99 %는 1000 바이트 미만).

s3 API는 단일 HTTP 호출에서 여러 객체 업로드를 지원합니까?

모든 객체는 S3에서 개별 객체로 사용할 수 있어야합니다. 다른 곳 (FTP 등) 또는 다른 형식 (데이터베이스, EC2 로컬 드라이브 등)으로 호스팅 할 수 없습니다. 그것은 제가 변경할 수없는 외부 요구 사항입니다.


s3 API는 단일 HTTP 호출에서 여러 객체 업로드를 지원합니까?

아니요, S3 PUT 작업 은 HTTP 요청 당 하나의 객체 업로드 만 지원합니다.

원격 버킷과 동기화하려는 머신에 S3 도구설치 하고 다음 명령을 실행할 수 있습니다.

s3cmd sync localdirectory s3://bucket/

그런 다음이 명령을 스크립트에 넣고 매일 밤이 명령을 실행하도록 예약 된 작업을 만들 수 있습니다.

이것은 당신이 원하는 것을해야합니다.

이 도구는 MD5 해시 및 파일 크기를 기반으로 파일 동기화를 수행하므로 충돌이 거의 발생하지 않습니다 (원하는 경우 "s3cmd put"명령을 사용하여 대상 버킷의 객체를 강제로 덮어 쓸 수 있음).

편집 : 또한 S3 도구에 대해 링크 한 사이트의 설명서를 읽으십시오. 로컬에서 삭제 된 파일을 버킷에서 삭제하거나 무시할 것인지 여부에 대해 필요한 다른 플래그가 있습니다.


또는 sync 명령을 사용하여 AWS CLI 도구통해 S3를 업로드 할 수 있습니다 .

aws s3 sync local_folder s3 : // bucket-name

이 방법을 사용하여 S3에 파일을 매우 빠르게 일괄 업로드 할 수 있습니다.


모든 사람이 말하는 내용을 추가하기 위해 모든 파일을 단일 디렉토리에 넣지 않고도 Java 코드 (CLI 대신)가이 작업을 수행하도록하려면 업로드 할 파일 목록을 만든 다음 제공 할 수 있습니다. 목록을 AWS TransferManager의 uploadFileList 메서드에 추가합니다.

https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html#uploadFileList-java.lang.String-java.lang.String-java.io. 파일 -java.util.List-


하나의 파일 (또는 파일의 일부) = 하나의 HTTP 요청이지만 이제 Java API는 TransferManager 를 사용하여 멀티 스레딩을 직접 작성할 필요없이 효율적인 다중 파일 업로드를 지원합니다.


Java 프로그램을 사용하려면 다음을 수행하십시오.

public  void uploadFolder(String bucket, String path, boolean includeSubDirectories) {
    File dir = new File(path);
    MultipleFileUpload upload = transferManager.uploadDirectory(bucket, "", dir, includeSubDirectories);
    try {
        upload.waitForCompletion();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

테스트를 원하는 경우 로컬 S3에 연결하기위한 s3client 및 전송 관리자 생성은 다음과 같습니다.

    AWSCredentials credentials = new BasicAWSCredentials(accessKey, token);
    s3Client = new AmazonS3Client(credentials); // This is deprecated but you can create using standard beans provided by spring/aws
    s3Client.setEndpoint("http://127.0.0.1:9000");//If you wish to connect to local S3 using minio etc...
    TransferManager transferManager = TransferManagerBuilder.standard().withS3Client(s3Client).build();

참고 URL : https://stackoverflow.com/questions/15050146/is-it-possible-to-perform-a-batch-upload-to-amazon-s3

반응형