|
40 | 40 | import software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest;
|
41 | 41 | import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
|
42 | 42 | import software.amazon.awssdk.services.s3.model.GetObjectRequest;
|
| 43 | +import software.amazon.awssdk.services.s3.model.HeadBucketRequest; |
| 44 | +import software.amazon.awssdk.services.s3.model.HeadObjectRequest; |
43 | 45 | import software.amazon.awssdk.services.s3.model.PutObjectRequest;
|
44 | 46 | import software.amazon.awssdk.services.s3.model.UploadPartRequest;
|
45 | 47 | import software.amazon.awssdk.services.s3.presigner.model.AbortMultipartUploadPresignRequest;
|
@@ -341,17 +343,118 @@ default PresignedGetObjectRequest presignGetObject(Consumer<GetObjectPresignRequ
|
341 | 343 | return presignGetObject(builder.build());
|
342 | 344 | }
|
343 | 345 |
|
| 346 | + /** |
| 347 | + * Presign a {@link HeadObjectRequest} so that it can be executed at a later time without requiring additional |
| 348 | + * signing or authentication. |
| 349 | + * <p/> |
| 350 | + * |
| 351 | + * <b>Example Usage</b> |
| 352 | + * <p/> |
| 353 | + * |
| 354 | + * <pre> |
| 355 | + * {@code |
| 356 | + * S3Presigner presigner = ...; |
| 357 | + * |
| 358 | + * // Create a HeadObjectRequest to be pre-signed |
| 359 | + * HeadObjectRequest headObjectRequest = |
| 360 | + * HeadObjectRequest.builder() |
| 361 | + * .bucket("my-bucket") |
| 362 | + * .key("my-key") |
| 363 | + * .build(); |
| 364 | + * |
| 365 | + * // Create a HeadObjectPresignRequest to specify the signature duration |
| 366 | + * HeadObjectPresignRequest headObjectPresignRequest = |
| 367 | + * HeadObjectPresignRequest.builder() |
| 368 | + * .signatureDuration(Duration.ofMinutes(10)) |
| 369 | + * .headObjectRequest(headObjectRequest) |
| 370 | + * .build(); |
| 371 | + * |
| 372 | + * // Generate the presigned request |
| 373 | + * PresignedHeadObjectRequest presignedHeadObjectRequest = |
| 374 | + * presigner.presignHeadObject(headObjectPresignRequest); |
| 375 | + * |
| 376 | + * // The presigned URL can be used with an HTTP client to retrieve object metadata |
| 377 | + * SdkHttpClient httpClient = ApacheHttpClient.builder().build(); |
| 378 | + * HttpExecuteRequest request = HttpExecuteRequest.builder() |
| 379 | + * .request(presignedHeadObjectRequest.httpRequest()) |
| 380 | + * .build(); |
| 381 | + * HttpExecuteResponse response = httpClient.prepareRequest(request).call(); |
| 382 | + * |
| 383 | + * // Extract metadata from response headers |
| 384 | + * String contentLength = response.httpResponse().firstMatchingHeader("Content-Length").orElse("0"); |
| 385 | + * } |
| 386 | + * </pre> |
| 387 | + */ |
344 | 388 | PresignedHeadObjectRequest presignHeadObject(HeadObjectPresignRequest request);
|
345 | 389 |
|
| 390 | + /** |
| 391 | + * Presign a {@link HeadObjectRequest} so that it can be executed at a later time without requiring additional |
| 392 | + * signing or authentication. |
| 393 | + * <p /> |
| 394 | + * This is a shorter method of invoking {@link #presignHeadObject(HeadObjectPresignRequest)} without needing |
| 395 | + * to call {@code HeadObjectPresignRequest.builder()} or {@code .build()}. |
| 396 | + * |
| 397 | + * @see #presignHeadObject(HeadObjectPresignRequest) |
| 398 | + */ |
346 | 399 | default PresignedHeadObjectRequest presignHeadObject(Consumer<HeadObjectPresignRequest.Builder> request) {
|
347 | 400 | HeadObjectPresignRequest.Builder builder = HeadObjectPresignRequest.builder();
|
348 | 401 | request.accept(builder);
|
349 | 402 | return presignHeadObject(builder.build());
|
350 | 403 | }
|
351 | 404 |
|
352 |
| - |
| 405 | + /** |
| 406 | + * Presign a {@link HeadBucketRequest} so that it can be executed at a later time without requiring additional |
| 407 | + * signing or authentication. |
| 408 | + * <p/> |
| 409 | + * |
| 410 | + * <b>Example Usage</b> |
| 411 | + * <p/> |
| 412 | + * |
| 413 | + * <pre> |
| 414 | + * {@code |
| 415 | + * S3Presigner presigner = ...; |
| 416 | + * |
| 417 | + * // Create a HeadBucketRequest to be pre-signed |
| 418 | + * HeadBucketRequest headBucketRequest = |
| 419 | + * HeadBucketRequest.builder() |
| 420 | + * .bucket("my-bucket") |
| 421 | + * .build(); |
| 422 | + * |
| 423 | + * // Create a HeadBucketPresignRequest to specify the signature duration |
| 424 | + * HeadBucketPresignRequest headBucketPresignRequest = |
| 425 | + * HeadBucketPresignRequest.builder() |
| 426 | + * .signatureDuration(Duration.ofMinutes(10)) |
| 427 | + * .headBucketRequest(headBucketRequest) |
| 428 | + * .build(); |
| 429 | + * |
| 430 | + * // Generate the presigned request |
| 431 | + * PresignedHeadBucketRequest presignedHeadBucketRequest = |
| 432 | + * presigner.presignHeadBucket(headBucketPresignRequest); |
| 433 | + * |
| 434 | + * // The presigned URL can be used with an HTTP client to check bucket existence and access |
| 435 | + * SdkHttpClient httpClient = ApacheHttpClient.builder().build(); |
| 436 | + * HttpExecuteRequest request = HttpExecuteRequest.builder() |
| 437 | + * .request(presignedHeadBucketRequest.httpRequest()) |
| 438 | + * .build(); |
| 439 | + * HttpExecuteResponse response = httpClient.prepareRequest(request).call(); |
| 440 | + * |
| 441 | + * // Check if bucket exists and is accessible |
| 442 | + * boolean bucketExists = response.httpResponse().isSuccessful(); |
| 443 | + * String region = response.httpResponse().firstMatchingHeader("x-amz-bucket-region").orElse(""); |
| 444 | + * } |
| 445 | + * </pre> |
| 446 | + */ |
353 | 447 | PresignedHeadBucketRequest presignHeadBucket(HeadBucketPresignRequest request);
|
354 | 448 |
|
| 449 | + /** |
| 450 | + * Presign a {@link HeadBucketRequest} so that it can be executed at a later time without requiring additional |
| 451 | + * signing or authentication. |
| 452 | + * <p> |
| 453 | + * This is a shorter method of invoking {@link #presignHeadBucket(HeadBucketPresignRequest)} without needing |
| 454 | + * to call {@code HeadBucketPresignRequest.builder()} or {@code .build()}. |
| 455 | + * |
| 456 | + * @see #presignHeadBucket(HeadBucketPresignRequest) |
| 457 | + */ |
355 | 458 | default PresignedHeadBucketRequest presignHeadBucket(Consumer<HeadBucketPresignRequest.Builder> request) {
|
356 | 459 | HeadBucketPresignRequest.Builder builder = HeadBucketPresignRequest.builder();
|
357 | 460 | request.accept(builder);
|
|
0 commit comments