我將檔案上傳到我的 Amazon S3 存盤桶,我想使用 aws-SDK 而不是控制臺獲取我放入的物件的 url。該物件具有我嘗試使用的公共讀取訪問權限
const url = s3Client.getSignedUrl('getObject', {
Bucket: srcBucket,
Key: key,
});
但這會生成一個過期的簽名 url。我似乎找不到任何其他方法來獲取網址。任何幫助深表感謝。
uj5u.com熱心網友回復:
您可以使用 AWS SDK for Java V2 獲取 Amazon S3 物件的 URL。這是代碼:
// snippet-start:[s3.java2.getobjecturl.import]
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.GetUrlRequest;
import software.amazon.awssdk.services.s3.model.S3Exception;
import java.net.URL;
// snippet-end:[s3.java2.getobjecturl.import]
public class GetObjectUrl {
public static void main(String[] args) {
final String USAGE = "\n"
"Usage:\n"
" <bucketName> <keyName> \n\n"
"Where:\n"
" bucketName - the Amazon S3 bucket name.\n\n"
" keyName - a key name that represents the object. \n\n";
if (args.length != 2) {
System.out.println(USAGE);
System.exit(1);
}
String bucketName = args[0];
String keyName = args[1];
Region region = Region.US_EAST_1 ;
S3Client s3 = S3Client.builder()
.region(region)
.build();
getURL(s3,bucketName,keyName);
s3.close();
}
// snippet-start:[s3.java2.getobjecturl.main]
public static void getURL(S3Client s3, String bucketName, String keyName ) {
try {
GetUrlRequest request = GetUrlRequest.builder()
.bucket(bucketName)
.key(keyName)
.build();
URL url = s3.utilities().getUrl(request);
System.out.println("The URL for " keyName " is " url.toString());
} catch (S3Exception e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
// snippet-end:[s3.java2.getobjecturl.main]
}
uj5u.com熱心網友回復:
以防萬一有人遇到類似的問題,就像評論中提到的人一樣,截至撰寫本文之日,沒有任何 API 可以在沒有簽名的情況下獲取 s3 url,除非您自己構建它。但是,我發現以下解決方案快速且易于實施。
const signedUrl = s3Client.getSignedUrl('getObject', {
Bucket: srcBucket,
Key: key,
});
signedUrl 以這種格式回傳:
https://{org}.s3.us-west-2.amazonaws.com/{PATH}/13592c51-d504-4899-960a-04efa0a7f6b7.mp3?AWSAccessKeyId={AWSKEY}&Expires={EPOC DATE}&Signature={RANDOMKEY-amz-security-}token=RANDOM&TOKEN}
要獲取未簽名的 url (s3 Object url),您可以通過"?"查詢分隔符拆分字串并回傳與 Object url 相同的第一個元素。
const url = signedUrl.split('?')[0];
// https://{org}.s3.us-west-2.amazonaws.com/{PATH}/13592c51-d504-4899-960a-04efa0a7f6b7.mp3
唯一需要考慮的是 AWS 是否會在未來更改 s3 物件 url 的顯示方式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/427901.html
