簡體   English   中英

將多個文件異步上傳到 AWS S3 存儲桶

[英]Asynchronous multiple files upload to AWS S3 bucket

我想使用來自 AWS Java SDK (aws-java-sdk-s3-1.11.66.jar) 的傳輸管理器將多個文件上傳到 AWS S3 存儲桶,所以我的功能在這里:

public static void uploadDirectory(String virtualDirectoryKeyPrefix, File directory) {
    try {
        MultipleFileUpload multipleFileUpload = instance.transferManager.uploadFileList(
                instance.bucketName,
                virtualDirectoryKeyPrefix,
                directory,
                Arrays.asList(Objects.requireNonNull(directory.listFiles())));

        multipleFileUpload.waitForCompletion();
    } catch (InterruptedException e) {
        Logger.error("Not able to write to s3 bucket : " + virtualDirectoryKeyPrefix, e);
    }
}

它僅在我調用“waitForCompletion”方法時才起作用的問題,它使我的函數同步,因為在這種情況下,我會等到操作完成。 我希望它必須在沒有“waitForCompletion”調用的情況下工作,但事實並非如此,你能幫我嗎? 謝謝。

waitForCompletion 只會阻塞直到傳輸完成( https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/Transfer.html#waitForCompletion-- )。

我懷疑您的傳輸之前也可以運行,但是因為它是異步的,所以您沒有檢查它何時完成。 為了接收異步更新,添加一個 ProgressListener,如下所述: https : //docs.aws.amazon.com/AmazonS3/latest/dev/HLTrackProgressMPUJava.html

為什么不能給 transferManager 實例添加一個監聽器

    transferMangerInstance.upload(putObjectRequestInstance);
    transferMangerInstance.addProgressListener(ProgressListener progressListener);

    transferMangerInstance.addProgressListener(new ProgressListener() {
                @Override
                public void progressChanged(ProgressEvent progressEvent) {
                    if(progressEvent.getEventType() == ProgressEventType.TRANSFER_COMPLETED_EVENT) {
                  //Do your completion logic here
                    }
                }
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM