Нет, вы не можете получить URL-адрес в одном действии, но два:)
Прежде всего, вам, возможно, придется публиковать файл перед загрузкой, потому что нет смысла получать URL-адрес, который никто не может доступ. Вы можете сделать это, установив ACL, как предложил Майкл Астрейко. Вы можете получить URL ресурса, вызвав getResourceUrl
или getUrl
.
AmazonS3Client s3Client = (AmazonS3Client)AmazonS3ClientBuilder.defaultClient();
s3Client.putObject(new PutObjectRequest("your-bucket", "some-path/some-key.jpg", new File("somePath/someKey.jpg")).withCannedAcl(CannedAccessControlList.PublicRead))
s3Client.getResourceUrl("your-bucket", "some-path/some-key.jpg");
Примечание1: Разница между getResourceUrl
и getUrl
заключается в том, что getResourceUrl вернет значение null при возникновении исключения.
Примечание2: getUrl
метод не определен в интерфейсе AmazonS3. Вы должны отдать объект AmazonS3Client, если используете стандартный строитель.
Снимки зависят от региона, а не от VPC, поэтому вы не можете напрямую перечислить все снимки для определенного VPC.
Если вам нужна такая фильтрация, вы можете пометить каждый снимок с помощью VPC, к которому он «принадлежит» (т.е. VPCID:value-of-VPC-id
). А затем используйте эту команду.
aws ec2 describe-snapshots --owner-ids <your-account-id> --filters Name=tag:VPCID,Values=<value-of-VPC-id>
Если вы хотите получить только VPC ID и время, то вы можете улучшить вышеприведенное с помощью параметра query
aws ec2 describe-snapshots --owner-ids <your-account-id> --filters Name=tag:VPCID,Values=<value-of-VPC-id> --query "Snapshots[*].{ID:SnapshotId,Time:StartTime}"