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 ;
46
48
import software .amazon .awssdk .services .s3 .presigner .model .CompleteMultipartUploadPresignRequest ;
47
49
import software .amazon .awssdk .services .s3 .presigner .model .CreateMultipartUploadPresignRequest ;
48
50
import software .amazon .awssdk .services .s3 .presigner .model .DeleteObjectPresignRequest ;
49
51
import software .amazon .awssdk .services .s3 .presigner .model .GetObjectPresignRequest ;
52
+ import software .amazon .awssdk .services .s3 .presigner .model .HeadBucketPresignRequest ;
53
+ import software .amazon .awssdk .services .s3 .presigner .model .HeadObjectPresignRequest ;
50
54
import software .amazon .awssdk .services .s3 .presigner .model .PresignedAbortMultipartUploadRequest ;
51
55
import software .amazon .awssdk .services .s3 .presigner .model .PresignedCompleteMultipartUploadRequest ;
52
56
import software .amazon .awssdk .services .s3 .presigner .model .PresignedCreateMultipartUploadRequest ;
53
57
import software .amazon .awssdk .services .s3 .presigner .model .PresignedDeleteObjectRequest ;
54
58
import software .amazon .awssdk .services .s3 .presigner .model .PresignedGetObjectRequest ;
59
+ import software .amazon .awssdk .services .s3 .presigner .model .PresignedHeadBucketRequest ;
60
+ import software .amazon .awssdk .services .s3 .presigner .model .PresignedHeadObjectRequest ;
55
61
import software .amazon .awssdk .services .s3 .presigner .model .PresignedPutObjectRequest ;
56
62
import software .amazon .awssdk .services .s3 .presigner .model .PresignedUploadPartRequest ;
57
63
import software .amazon .awssdk .services .s3 .presigner .model .PutObjectPresignRequest ;
@@ -328,7 +334,7 @@ static Builder builder() {
328
334
* <p />
329
335
* This is a shorter method of invoking {@link #presignGetObject(GetObjectPresignRequest)} without needing
330
336
* to call {@code GetObjectPresignRequest.builder()} or {@code .build()}.
331
- *
337
+ *
332
338
* @see #presignGetObject(GetObjectPresignRequest)
333
339
*/
334
340
default PresignedGetObjectRequest presignGetObject (Consumer <GetObjectPresignRequest .Builder > request ) {
@@ -337,6 +343,128 @@ default PresignedGetObjectRequest presignGetObject(Consumer<GetObjectPresignRequ
337
343
return presignGetObject (builder .build ());
338
344
}
339
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
+ */
388
+ default PresignedHeadObjectRequest presignHeadObject (HeadObjectPresignRequest request ) {
389
+ throw new UnsupportedOperationException ();
390
+ }
391
+
392
+ /**
393
+ * Presign a {@link HeadObjectRequest} so that it can be executed at a later time without requiring additional
394
+ * signing or authentication.
395
+ * <p />
396
+ * This is a shorter method of invoking {@link #presignHeadObject(HeadObjectPresignRequest)} without needing
397
+ * to call {@code HeadObjectPresignRequest.builder()} or {@code .build()}.
398
+ *
399
+ * @see #presignHeadObject(HeadObjectPresignRequest)
400
+ */
401
+ default PresignedHeadObjectRequest presignHeadObject (Consumer <HeadObjectPresignRequest .Builder > request ) {
402
+ HeadObjectPresignRequest .Builder builder = HeadObjectPresignRequest .builder ();
403
+ request .accept (builder );
404
+ return presignHeadObject (builder .build ());
405
+ }
406
+
407
+ /**
408
+ * Presign a {@link HeadBucketRequest} so that it can be executed at a later time without requiring additional
409
+ * signing or authentication.
410
+ * <p/>
411
+ *
412
+ * <b>Example Usage</b>
413
+ * <p/>
414
+ *
415
+ * <pre>
416
+ * {@code
417
+ * S3Presigner presigner = ...;
418
+ *
419
+ * // Create a HeadBucketRequest to be pre-signed
420
+ * HeadBucketRequest headBucketRequest =
421
+ * HeadBucketRequest.builder()
422
+ * .bucket("my-bucket")
423
+ * .build();
424
+ *
425
+ * // Create a HeadBucketPresignRequest to specify the signature duration
426
+ * HeadBucketPresignRequest headBucketPresignRequest =
427
+ * HeadBucketPresignRequest.builder()
428
+ * .signatureDuration(Duration.ofMinutes(10))
429
+ * .headBucketRequest(headBucketRequest)
430
+ * .build();
431
+ *
432
+ * // Generate the presigned request
433
+ * PresignedHeadBucketRequest presignedHeadBucketRequest =
434
+ * presigner.presignHeadBucket(headBucketPresignRequest);
435
+ *
436
+ * // The presigned URL can be used with an HTTP client to check bucket existence and access
437
+ * SdkHttpClient httpClient = ApacheHttpClient.builder().build();
438
+ * HttpExecuteRequest request = HttpExecuteRequest.builder()
439
+ * .request(presignedHeadBucketRequest.httpRequest())
440
+ * .build();
441
+ * HttpExecuteResponse response = httpClient.prepareRequest(request).call();
442
+ *
443
+ * // Check if bucket exists and is accessible
444
+ * boolean bucketExists = response.httpResponse().isSuccessful();
445
+ * String region = response.httpResponse().firstMatchingHeader("x-amz-bucket-region").orElse("");
446
+ * }
447
+ * </pre>
448
+ */
449
+ default PresignedHeadBucketRequest presignHeadBucket (HeadBucketPresignRequest request ) {
450
+ throw new UnsupportedOperationException ();
451
+ }
452
+
453
+ /**
454
+ * Presign a {@link HeadBucketRequest} so that it can be executed at a later time without requiring additional
455
+ * signing or authentication.
456
+ * <p>
457
+ * This is a shorter method of invoking {@link #presignHeadBucket(HeadBucketPresignRequest)} without needing
458
+ * to call {@code HeadBucketPresignRequest.builder()} or {@code .build()}.
459
+ *
460
+ * @see #presignHeadBucket(HeadBucketPresignRequest)
461
+ */
462
+ default PresignedHeadBucketRequest presignHeadBucket (Consumer <HeadBucketPresignRequest .Builder > request ) {
463
+ HeadBucketPresignRequest .Builder builder = HeadBucketPresignRequest .builder ();
464
+ request .accept (builder );
465
+ return presignHeadBucket (builder .build ());
466
+ }
467
+
340
468
/**
341
469
* Presign a {@link PutObjectRequest} so that it can be executed at a later time without requiring additional
342
470
* signing or authentication.
0 commit comments