簡體   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