Многокомпонентная загрузка с использованием класса TransferManager AWS SDK для Java завершается неудачно при первой загрузке при работе в AIX - PullRequest
0 голосов
/ 23 апреля 2020

Я использую класс TransferManager AWS SDK для Java (aws - java -sdk-s3, версия 1.11.373) для загрузки файлов с компьютера AIX в сегменты S3. Не удается выполнить многоэтапную передачу при первой загрузке части с отмененным состоянием при попытке загрузить «большие» файлы (например, файл объемом 1 ГБ, но такая же проблема возникает и для файлов размером 60 МБ).

Как эта проблема может быть разрешен?

Мой фрагмент кода (тот же код работает нормально на Windows / Linux машинах):

TransferManager tx = TransferManagerBuilder.standard().withS3Client(getAmzClient()).build();

PutObjectRequest putObjectRequest = new PutObjectRequest(getBucket(), file, fileToUpload);

S3ProgressListener pl = new S3ProgressListener(this);

putObjectRequest.setGeneralProgressListener(pl);

Transfer transfer = tx.upload(putObjectRequest);


while (!transfer.isDone()) {
    [business logic code that does not refer to any S3 objects]
}

...

public class S3ProgressListener implements ProgressListener {

    S3FileCopy fc;
    Object obj = new Object();

    public S3ProgressListener(S3FileCopy fc) {
        this.fc = fc;
    }

    @Override
    public void progressChanged(ProgressEvent progressEvent) {
        synchronized (obj) {
            fc.transferedSize += progressEvent.getBytesTransferred();
            if(fc.transferedSize > fc.fileSize) {
                fc.transferedSize = fc.fileSize;
            }
        }       
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...