Можно ли загрузить файл txt / pdf / png в Amazon S3 одним действием и получить URL-адрес загруженного файла в качестве ответа. Если да, то является ли AWS Java SDK подходящей библиотекой, которую мне нужно добавить в мое веб-приложение java struts2.
Пожалуйста, предложите мне решение для этого.
java
amazon-s3
amazon-web-services
Санграм Ананд
источник
источник
Ответы:
Чтобы сделать файл общедоступным перед загрузкой, вы можете использовать
#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, если используете стандартный построитель.источник
s3Client.getResourceUrl("your-bucket", "some-path/some-key.jpg")
URL работает без обращения к AWS.getResourceUrl
нет в последней версии sdk.s3Client.getUrl("your-bucket", "some-path/some-key.jpg").toString();
получит общедоступный URL.s3Client.utilities().getUrl(getUrlRequest);
Вы можете решить это сами, учитывая сегмент и имя файла, указанное в запросе на загрузку.
например, если ваша корзина
mybucket
и ваш файл называетсяmyfilename
:https://mybucket.s3.amazonaws.com/myfilename
s3
Немного будет отличаться в зависимости от того, какого региона вашего ведра в Например, я использую Регион Юго-восток , так что мои URLs похожи.:https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename
источник
Ответы @hussachai и @Jeffrey Kemp довольно хороши. Но у них есть кое-что общее: возвращаемый URL-адрес имеет стиль виртуального хоста, а не стиль пути. Для получения дополнительной информации о стиле URL-адреса s3 см. Стили URL-адресов AWS S3 . В случае, если некоторые люди хотят сгенерировать URL-адрес s3 в стиле пути. Вот шаг. В основном все будет таким же, как ответы @hussachai и @Jeffrey Kemp, только с одним изменением настройки строки, как показано ниже:
AmazonS3Client s3Client = (AmazonS3Client) AmazonS3ClientBuilder.standard() .withRegion("us-west-2") .withCredentials(DefaultAWSCredentialsProviderChain.getInstance()) .withPathStyleAccessEnabled(true) .build(); // Upload a file as a new object with ContentType and title specified. PutObjectRequest request = new PutObjectRequest(bucketName, stringObjKeyName, fileToUpload); s3Client.putObject(request); URL s3Url = s3Client.getUrl(bucketName, stringObjKeyName); logger.info("S3 url is " + s3Url.toExternalForm());
Это сгенерирует URL-адрес, например: https://s3.us-west-2.amazonaws.com/mybucket/myfilename
источник
Точно так же, если вы хотите ссылку через s3Client, вы можете использовать ниже.
System.out.println("filelink: " + s3Client.getUrl("your_bucket_name", "your_file_key"));
источник
немного устарело, но все же для тех, кто наткнется на это в будущем:
вы можете сделать это одной строкой, если вы уже написали 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 );
источник
Для AWS SDK 2+
String key = "filePath"; String bucketName = "bucketName"; PutObjectResponse response = s3Client .putObject(PutObjectRequest.builder().bucket(bucketName ).key(key).build(), RequestBody.fromFile(file)); GetUrlRequest request = GetUrlRequest.builder().bucket(bucketName ).key(key).build(); String url = s3Client.utilities().getUrl(request).toExternalForm();
источник
System.out.println("Link : " + s3Object.getObjectContent().getHttpRequest().getURI());
с его помощью вы можете получить ссылку на уже загруженный файл в корзину S3.
источник
Ниже метод загружает файл в определенную папку в корзине и возвращает сгенерированный URL-адрес загруженного файла.
private String uploadFileToS3Bucket(final String bucketName, final File file) { final String uniqueFileName = uploadFolder + "/" + file.getName(); LOGGER.info("Uploading file with name= " + uniqueFileName); final PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, uniqueFileName, file); amazonS3.putObject(putObjectRequest); return ((AmazonS3Client) amazonS3).getResourceUrl(bucketName, uniqueFileName); }
источник