AWS S3 JAVA预签名SDK1.X 2.X 包能用

S3 SDK 1.x  2.x的预签名上传地址,地区设置,ACL权限设置,包能使用

<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk</artifactId>
  <version>1.12.609</version>
</dependency>
public String getApkUploadUrl() {
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    String formattedDate = sdf.format(date);
    String bucketName = "xxxxx"; // 设置存储桶名称
    String objectKey = "logo/"+ UUID.randomUUID() + ".png"; // 设置对象路径(包括文件名)
    Date expireDate = new Date(System.currentTimeMillis() + 300000);

    AWSCredentials credentials = new BasicAWSCredentials("keyid", "key"); // 设置访问密钥
    AmazonS3 s3client = AmazonS3ClientBuilder.standard()
      .withRegion(AP_SOUTHEAST_1)
      .withCredentials(new AWSStaticCredentialsProvider(credentials))
      .build();
    GeneratePresignedUrlRequest generatePresignedUrlRequest =
      new GeneratePresignedUrlRequest(bucketName, objectKey)
        .withMethod(HttpMethod.PUT)
        .withExpiration(expireDate);

    generatePresignedUrlRequest.addRequestParameter("x-amz-acl", "public-read");

    URI presignedUri = null;
    try {
      presignedUri = s3client.generatePresignedUrl(generatePresignedUrlRequest).toURI();
    } catch (URISyntaxException e) {
      System.out.println(e.getMessage());
      return "";
    }
    return presignedUri.toString();
  }

SDK 2.X 的实现:

<dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>s3</artifactId>
      <version>2.21.42</version>
    </dependency>
static String bucketName = "xxxx";
  public static void main(String[] args) {
    String objectKey = "apk/" + UUID.randomUUID() + ".apk"; // 设置对象路径(包括文件名)
    String url = preview(bucketName, objectKey);
    System.out.println(url);
  }

  // 获取aws供应商凭据
  private static AwsCredentialsProviderChain getAwsCredentialsProviderChain(){
    return AwsCredentialsProviderChain
      .builder()
      .addCredentialsProvider(() -> AwsBasicCredentials.create("appid", "appkey")).build();
  }

  private static S3Presigner getS3Presigner() {
    return  S3Presigner.builder()
      .region(Region.AP_SOUTHEAST_1)
      .credentialsProvider(getAwsCredentialsProviderChain())
      .build();
  }

  private static String preview(String bucketName, String key) {
    AwsRequestOverrideConfiguration override = AwsRequestOverrideConfiguration.builder()
      .putRawQueryParameter("x-amz-acl", "public-read")
      .build();

    PutObjectRequest putObjectRequest =
      PutObjectRequest.builder()
        .overrideConfiguration(override)
        .bucket(bucketName)
        .key(key)
        .acl(ObjectCannedACL.PUBLIC_READ)
        .build();

    PutObjectPresignRequest putObjectPresignRequest =  PutObjectPresignRequest.builder()
      .signatureDuration(Duration.ofMinutes(10))
      .putObjectRequest(putObjectRequest)
      .build();

    PresignedPutObjectRequest presignedGetObjectRequest =
      getS3Presigner().presignPutObject(putObjectPresignRequest);

    return presignedGetObjectRequest.url().toString();
  }

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值