我正在构建一个小型 REST API 服务来存储和检索照片。为此,我使用 S3,如下所示:
public String upload(InputStream uploadedInputStream,
Map<String, String> metadata, String group, String filename) {
TransferManager tm = TransferManagerBuilder.standard()
.withS3Client(amazonS3)
.build();
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType(metadata.get(Configuration.CONTENT_TYPE_METADATA_KEY));
// TODO: 26/06/20 Add content-type to metadata
String filepath = group + "/" + filename;
s3transferManager.upload(new PutObjectRequest(
configuration.getProperty("aws.s3.bucket"),
filepath,
uploadedInputStream,
objectMetadata)).waitForUploadResult();
return amazonS3.getUrl(configuration.getProperty("aws.s3.bucket"), filepath).toString();
}
url
returned by the function looks like https://photos.tarkshala.com.s3.ap-south-1.amazonaws.com/default-group/1593911534320%230 https://photos.tarkshala.com.s3.ap-south-1.amazonaws.com/default-group/1593911534320%230. When accessed it shows up like this
当我使用对象 url 打开它时(https://s3.ap-south-1.amazonaws.com/photos.tarkshala.com/default-group/1593911534320%230 https://s3.ap-south-1.amazonaws.com/photos.tarkshala.com/default-group/1593911534320%230)在 AWS S3 控制台中给出,它显示得很好。
Why getUrl
方法不返回第二个 url,或者有没有办法获取第二个方法/api?
这是因为 AWS 最近对 s3 进行了更改。
使用时具有 SSL(SSL 通配符)的虚拟托管式存储桶
证书仅匹配不包含点(“.”)的存储桶。到
解决这个问题,使用 HTTP 或编写自己的证书验证
逻辑。有关更多信息,请参阅 Amazon S3 路径弃用计划。
amazon-s3-path-弃用-计划-故事的其余部分 https://aws.amazon.com/blogs/aws/amazon-s3-path-deprecation-plan-the-rest-of-the-story/
创建一个不带点的存储桶或使用路径样式 URL 或者您检查虚拟主机自定义 URL https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingCustomURLs.
S3支持两种类型的URL来访问Object。
https://bucket-name.s3.Region.amazonaws.com/key name
https://s3.Region.amazonaws.com/bucket-name/key name
重要的
2020 年 9 月 30 日之后创建的存储桶将仅支持虚拟的
托管式请求。路径式请求将继续
支持在此日期或之前创建的存储桶。了解更多
信息,请参阅 Amazon S3 路径弃用计划 – 其余部分
故事。
S3虚拟主机 https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)