Вопрос по amazon-s3, amazon-web-services, java – Amazon S3 загрузите файл и получите URL
Прежде всего, вам может потребоваться сделать файл общедоступным перед загрузкой, потому что нет смысла получать URL, к которому никто не может получить доступ. Вы можете сделать это, установив ACL, как предложил Michael Astreiko.
Вы можете получить 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");
Note1:
Различия междуgetResourceUrl
а такжеgetUrl
является то, что getResourceUrl будет возвращать ноль, когда происходит исключение.
Note2:
getUrl
метод не определен в интерфейсе AmazonS3. Вы должны привести объект к AmazonS3Client, если вы используете стандартный компоновщик.
но все же для любого, кто столкнется с этим в будущем:
Вы можете сделать это одной строкой, если вы уже написали CredentialProvider и AmazonS3Client.
это будет выглядеть так:
String ImageURL = String.valueOf(s3.getUrl(
ConstantsAWS3.BUCKET_NAME, //The S3 Bucket To Upload To
file.getName())); //The key for the uploaded object
и если вы не написали CredentialProvider и AmazonS3Client, просто добавьте их, прежде чем получить URL-адрес следующим образом:
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(),
"POOL_ID", // Identity pool ID
Regions.US_EAST_1 // Region
);
учитывая область и имя файла, которое вы указываете в запросе на загрузку.
например если ваше ведроmybucket
и ваш файл называетсяmyfilename
:
https://mybucket.s3.amazonaws.com/myfilename
s3
бит будет отличаться в зависимости от того, в каком регионе находится ваше ведро. Например, я использую регион Юго-Восточной Азии, поэтому мои URL выглядят так:
https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename