Вопрос по amazon-s3, amazon-web-services, java – Amazon S3 загрузите файл и получите URL

75

Можно ли загрузить файл txt / pdf / png в Amazon S3 одним действием и получить URL загруженного файла в качестве ответа. Если да, то является ли AWS Java SDK подходящей библиотекой, которую мне нужно добавить в мое веб-приложение java struts2.

Пожалуйста, предложите мне решение для этого.

Ваш Ответ

6   ответов
79

Прежде всего, вам может потребоваться сделать файл общедоступным перед загрузкой, потому что нет смысла получать 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, если вы используете стандартный компоновщик.

Стоит отметить, что это приводит только к одному вызову в AWS. Если вы покопаетесь в Java SDK, вы увидите, чтоs3Client.getResourceUrl("your-bucket", "some-path/some-key.jpg") разрабатывает URL без звонка в AWS.
для последней SDKs3Client.getUrl("your-bucket", "some-path/some-key.jpg").toString(); получит публичный URL.
Это все еще там. Возможно, вам придется привести интерфейс (AmazonS3) к классу (AmazonS3Client).
Заметка,getResourceUrl не в последней SDK.
Это действительно должен быть рекомендуемый ответ. Другой ответ не выполняется в тех случаях, когда имя файла содержит пробелы. В таких случаях имя файла, отображаемое на S3, и суффикс URL-адреса отличаются друг от друга. Приведенный выше метод s3Client.getUrl правильно обрабатывает этот сценарий
2

но все же для любого, кто столкнется с этим в будущем:

Вы можете сделать это одной строкой, если вы уже написали 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
);
0
        System.out.println("Link : " + s3Object.getObjectContent().getHttpRequest().getURI());

3.

4

если вы хотите ссылку t, через s3Client вы можете использовать ниже.

System.out.println("filelink: " + s3Client.getUrl("your_bucket_name", "your_file_key"));
-4

вы можете использовать#withCannedAcl методPutObjectRequest:

myAmazonS3Client.putObject(new PutObjectRequest('some-grails-bucket',  'somePath/someKey.jpg', new    File('/Users/ben/Desktop/photo.jpg')).withCannedAcl(CannedAccessControlList.PublicRead))
Это не говорит нам, как получить публичный URL загруженного ресурса.
Как мне получить ссылку из этого запроса?
74

учитывая область и имя файла, которое вы указываете в запросе на загрузку.

например если ваше ведроmybucket и ваш файл называетсяmyfilename:

https://mybucket.s3.amazonaws.com/myfilename

s3 бит будет отличаться в зависимости от того, в каком регионе находится ваше ведро. Например, я использую регион Юго-Восточной Азии, поэтому мои URL выглядят так:

https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename
Да, я верю в это. Но у меня нет опыта работы со стойками.
Да, есть варианты URL, которые должны работать. Выберите тот, который вы хотите использовать и пойти с ним.
Я почти закончил с загрузкой вещи .. но поражен разрешениями. Есть ли способ в AWS Java SDK для S3, чтобы мы могли сделать файл общедоступным перед загрузкой. Sangram Anand
Kool .. спасибо за информацию .. Кстати, часть загрузки я собираюсь сделать с библиотекой AWS SDK, верно? Sangram Anand
После загрузки файла из консоли управления AWS для одного файла будут работать следующие ссылки, поэтому ответ может быть следующим:s3.amazonaws.com/cdn.generalsentiment.com/MVR/reports/… -- cdn.generalsentiment.com.s3.amazonaws.com/MVR/reports/… -- cdn.generalsentiment.com/MVR/reports/… Sangram Anand

Похожие вопросы