Вот класс конфигурации, который создает компоненты, которые я использую для управления операциями S3.
Код: Выделить всё
@Configuration
public class Config {
@Bean(name = "wasabiCredentialsProvider")
public AwsCredentialsProvider wasabiCredentialProvider(@Value("${the.accessKey}") String accessKey,
@Value("${the.secretKey}") String secretKey) {
return StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKey, secretKey));
}
@Bean(name = "wasabiS3Async")
public S3AsyncClient wasabiS3Async(@Qualifier("wasabiCredentialsProvider") AwsCredentialsProvider awsCredentialsProvider,
@Value("${the.region}") String region,
@Value("${the.endpoint}") String endpoint) throws URISyntaxException {
SdkAsyncHttpClient nettyHttpClient = NettyNioAsyncHttpClient.builder()
.connectionAcquisitionTimeout(Duration.ofHours(3))
.connectionTimeout(Duration.ofHours(3))
.readTimeout(Duration.ofHours(3))
.writeTimeout(Duration.ofHours(3))
.maxConcurrency(100)
.build();
S3AsyncClientBuilder s3AsyncClientBuilder = S3AsyncClient.builder()
.credentialsProvider(awsCredentialsProvider)
.region(Region.of(region))
.httpClient(nettyHttpClient);
if (endpoint.contains("localhost")) {
s3AsyncClientBuilder.endpointOverride(new URI(endpoint))
.serviceConfiguration(S3Configuration.builder().pathStyleAccessEnabled(true).build());
}
return s3AsyncClientBuilder.build();
}
@Bean(name = "wasabiS3TransferManager")
public S3TransferManager wasabiS3TransferManager(final S3AsyncClient wasabiS3Async) {
return S3TransferManager.builder()
.s3Client(wasabiS3Async)
.build();
}
}
Код: Выделить всё
private final S3TransferManager wasabiS3TransferManager;
public void copyFile(final String sourceFolder, final String targetFolder, final String sourceFileId, final String bucketName, final String targetFileId) {
S3TransferManager s3TransferManager = wasabiS3TransferManager;
String sourceBucketPath = String.format("%s/%s", sourceFolder, sourceFileId);
String targetBucketPath = String.format("%s/%s", targetFolder, targetFileId);
try {
CopyObjectRequest copyObjectRequest = CopyObjectRequest.builder()
.sourceBucket(bucketName)
.sourceKey(sourceBucketPath)
.destinationBucket(bucketName)
.destinationKey(targetBucketPath)
.build();
CopyRequest copyRequest = CopyRequest.builder()
.copyObjectRequest(copyObjectRequest)
.build();
Copy copy = s3TransferManager.copy(copyRequest);
copy.completionFuture().join();
} catch (Exception exception) {
log.error("There was an error", exception.getMessage());
//Exception handling happens here
}
}
Код: Выделить всё
software.amazon.awssdk.services.s3.model.NoSuchBucketException: The specified bucket does not exist (Service: S3, Status Code: 404, Request ID: ,
Extended Request ID:)
Любое помощь приветствуется
Подробнее здесь: https://stackoverflow.com/questions/790 ... o-a-wasabi