【问题标题】:How do I set up an AWS S3 Object Redirect via the Java SDK如何通过 Java 开发工具包设置 AWS S3 对象重定向
【发布时间】:2020-12-11 03:29:53
【问题描述】:

我问这个问题是为了回答它并在我到达那里之前更快地将其他人指向正确的方向。

我花了太长时间寻找答案,因为大多数 S3 对象重定向问题及其答案都与混淆 S3 存储桶访问点和 S3 网站访问点的技术细节有关。

什么,有不同的网址?

是的 -- 见:https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html

一旦您发现自然路径似乎正在尝试使用 ObjectMetaData 设置至少以下之一:

x-amz-website-redirect-location
x-amz-user-website-redirect-location
website-redirect-location

当您通过 S3 管理门户检查元数据时,即使 API 会默默地将这些更改为 website-redirect-location,但这些都不起作用。

当然,可以通过门户轻松编辑 S3 对象的元数据,将密钥更改为Website-Redirect-Location,然后重定向立即开始工作,让人以为您几乎做对了...

下一个“明显”的地方是看是否还有其他方法,类似于 ObjectMetaData 上的方法.setContentLength.setContentType

不,那也不是。

【问题讨论】:

    标签: java amazon-web-services amazon-s3


    【解决方案1】:

    这是一个代码示例,它适用于我:

    private void highLevelMultipartUploadWithInfo(TransferManager transferManager, //
            String bucketName, String keyName, byte[] fileBytes, 
            long lastModified, String redirectURL) throws Exception {
    
        String contentType = "text/html";
    
        InputStream inputStream = new ByteArrayInputStream(fileBytes);
    
        ObjectMetadata metadata = new ObjectMetadata();
    
        metadata.setContentType(contentType);
        metadata.setContentLength(fileBytes.length);
        metadata.setLastModified(new java.util.Date(lastModified));
    
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, keyName, inputStream, metadata)
                .withCannedAcl(CannedAccessControlList.PublicRead) //
                .withRedirectLocation(redirectURL) //
                ;
    
        // TransferManager processes all transfers asynchronously,
        // so this call returns immediately.
        Upload upload = transferManager.upload(putObjectRequest);
        // Optionally, wait for the upload to finish before continuing.
        upload.waitForCompletion(); 
    }
    

    【讨论】:

      【解决方案2】:

      您实际设置重定向的方式是通过PutObjectRequest 本身。

      https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/index.html?com/amazonaws/services/s3/model/PutObjectRequest.html

      在该(Java)对象上有一个方法称为:.withRedirectLocation,它当然接受目标 URL 以进行所需的重定向。

      经过太多小时的搜索,我在这里偶然发现了那个小宝石:https://github.com/aws/aws-sdk-go/issues/837

      当然,一旦你知道怎么做,一切都会变得简单——对吧?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2012-07-26
        • 2011-09-25
        • 1970-01-01
        • 2011-11-10
        • 2020-08-05
        • 2023-03-15
        相关资源
        最近更新 更多