【发布时间】:2016-03-29 05:25:24
【问题描述】:
我正在生成预签名的 url,但由于 *.s3.amazonaws 证书,它对于带有句点和 SSL 的存储桶名称存在问题,如下所述: http://shlomoswidler.com/2009/08/amazon-s3-gotcha-using-virtual-host.html
有没有办法生成以下格式的网址?: http://s3.amazonaws.com/bucket.name/key
我没有在 API 中看到选项。我猜我可以通过重新排列网址来“手动”完成,但如果没有必要,我宁愿避免黑客攻击。
根据迈克尔的回答,这里是我现在使用的代码:
public static URL bucketNameAfterS3Url(URL url) {
int index = url.getHost().indexOf("s3");
String host = url.getHost().substring(index);
String bucket = url.getHost().substring(0, index - 1);
URL toUse;
try {
toUse = new URL(url.getProtocol(), host, url.getPort(), '/' + bucket + url.getFile());
} catch (MalformedURLException e) {
}
return toUse;
}
【问题讨论】:
-
AWS S3 文档对 getBucketLocation() 进行了说明,这是正常工作所必需的(请参阅 michael 的注释):“要查看存储桶的位置约束,用户必须是存储桶所有者。 "因为我们不拥有存储桶(我们只是获得了读取权限),所以这个解决方案似乎站不住脚,所以我们只是恢复到在周期的情况下通过我们的服务器流式传输文件。
标签: amazon-s3