繁体   English   中英

如何通过 Java SDK 设置 AWS S3 Object 重定向

[英]How do I set up an AWS S3 Object Redirect via the Java SDK

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

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

什么,有不同的 url?

是——请参阅: 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

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

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

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

不,那也不是。

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

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(); 
}

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

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

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

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

当然,一旦你知道怎么做,一切都很容易——对吧?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM