Amazon S3 загрузить файл и получить URL
можно ли загрузить файл txt/pdf/png в Amazon S3 одним действием и получить url-адрес загруженного файла в качестве ответа. Если да, то AWS Java sdk-это правильная библиотека, которую мне нужно добавить в мое веб-приложение java struts2.
пожалуйста, предложите мне решение для этого.
6 ответов:
чтобы сделать файл общедоступным перед загрузкой, вы можете использовать
#withCannedAcl
методPutObjectRequest
:myAmazonS3Client.putObject(new PutObjectRequest('some-grails-bucket', 'somePath/someKey.jpg', new File('/Users/ben/Desktop/photo.jpg')).withCannedAcl(CannedAccessControlList.PublicRead))
нет вы не можете получить 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, если вы используете стандартный конструктор.
вы можете решить это для себя, учитывая ведро и имя файла, которое вы указываете в запросе на загрузку.
например, если ваше ведро
mybucket
и ваш файл называетсяmyfilename
:https://mybucket.s3.amazonaws.com/myfilename
The
s3
бит будет отличаться в зависимости от того, в каком регионе находится ваше ведро. Например, я использую регион Юго-Восточной Азии, поэтому мои URL-адреса выглядят так:https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename
немного старый, но все же для тех, кто наткнулся на это в будущем:
вы можете сделать это с одной строкой, предполагая, что вы уже написали 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 );