TransferManager在6到7分钟后超时,在50.1%停止上传。

0

【以下的问题经过翻译处理】 处理过程以异常结束,并显示以下错误信息:“您的套接字连接未在超时时间内进行读取或写入。空闲连接将被关闭。(服务:S3,状态码:400,“正在尝试上传的文件大小为3GB。 运行了四次。第一次在大约35%停止,但是最后三次在50.1%处停止。这是代码和gradle文件。 、、、 S3AsyncClient s3AsyncClient; S3TransferManager transferManager;

public S3Upload() {
    s3AsyncClient =
            S3AsyncClient.crtBuilder()
                    .credentialsProvider(DefaultCredentialsProvider.create())
                    .region(Region.US_EAST_1)
                    .targetThroughputInGbps(20.0)
                    .minimumPartSizeInBytes(8 * MB)
                    .build();

    transferManager =
            S3TransferManager.builder()
                    .s3Client(s3AsyncClient)
                    .build();
}


public void writeFileToS3(String bucketName, String fileName,String filePath) {

    UploadFileRequest uploadFileRequest =
            UploadFileRequest.builder()
                    .putObjectRequest(b -> b.bucket(bucketName).key(fileName))
                    .addTransferListener(LoggingTransferListener.create())
                    .source(Paths.get(filePath))
                    .build();

    FileUpload fileUpload = transferManager.uploadFile(uploadFileRequest);
    CompletedFileUpload uploadResult = fileUpload.completionFuture().join();
    System.out.println(uploadResult);

}

   public static void main(String [] args)
   {
      S3Upload fileUpload = new S3Upload();
      String bucket = args[0];
      String destFile = args[1];
      String srcFile = args[2];

      System.out.println("Start date and time: " + LocalDateTime.now().toString());
      fileUpload.writeFileToS3(bucket, destFile, srcFile);
      System.out.println("End date and time: " + LocalDateTime.now().toString());
  }

plugins { id 'java' } 、、、

、、、 group 'org.example' version '1.0-SNAPSHOT'

repositories { mavenCentral() }

dependencies { implementation platform('software.amazon.awssdk:bom:2.20.56') implementation 'software.amazon.awssdk:s3' implementation 'software.amazon.awssdk:s3-transfer-manager' implementation 'software.amazon.awssdk.crt:aws-crt:0.21.14' implementation 'org.slf4j:slf4j-api:' implementation 'org.slf4j:slf4j-simple:2.0.6' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' }

test { useJUnitPlatform()

、、、

profile picture
专家
已提问 5 个月前34 查看次数
1 回答
0

【以下的回答经过翻译处理】 不确定这是唯一的解决方案,但最终我将吞吐量目标设置为接近于我的网络带宽(家庭互联网),而不是使用AWS示例中的20 Gbps。 、、、 s3AsyncClient = S3AsyncClient.crtBuilder() .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.US_EAST_1) .targetThroughputInGbps(.2) <================ .minimumPartSizeInBytes(8 * MB) .build(); 、、、 3GB 文件的上传在 43 分钟内完成

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则