Как получить URL-адрес после загрузки изображения в ведро S3 в python [duplicate]

Только если вы откроете новое окно, используя window.open (), новое окно сможет закрыть код, как я уже упоминал выше. Это отлично работает для меня :) Примечание. Никогда не используйте href для открытия страницы на новой вкладке. Window.close () не работает с «href». Вместо этого используйте window.open ().

68
задан Sangram Anand 11 June 2012 в 07:43
поделиться

6 ответов

Чтобы сделать файл общедоступным перед загрузкой, вы можете использовать метод #withCannedAcl в PutObjectRequest:

myAmazonS3Client.putObject(new PutObjectRequest('some-grails-bucket',  'somePath/someKey.jpg', new    File('/Users/ben/Desktop/photo.jpg')).withCannedAcl(CannedAccessControlList.PublicRead))
-1
ответ дан jonsca 18 August 2018 в 17:51
поделиться
  • 1
    Как получить ссылку из этого запроса? – Andreas Rudolph 29 August 2014 в 18:34
  • 2
    Это не говорит нам, как получить общедоступный URL-адрес загруженного ресурса. – Valentin Waeselynck 13 October 2014 в 01:34

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

System.out.println("filelink: " + s3Client.getUrl("your_bucket_name", "your_file_key"));
0
ответ дан anothernode 18 August 2018 в 17:51
поделиться

Нет, вы не можете получить 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, если используете стандартный строитель.

71
ответ дан hussachai 18 August 2018 в 17:51
поделиться
  • 1
    Стоит отметить, что это приводит только к одному призыву к AWS. Если вы вникнете в Java SDK, вы увидите, что s3Client.getResourceUrl("your-bucket", "some-path/some-key.jpg") работает с URL без вызова AWS. – sihil 30 September 2016 в 10:52
  • 2
    Это действительно должен быть рекомендованный ответ. Другой ответ не подходит для случаев, когда имя файла включает пробелы. В таких сценариях имя файла, отображаемое на S3, и суффикс URL-адреса отличаются друг от друга. Вышеупомянутый метод s3Client.getUrl правильно обрабатывает этот сценарий – RvPr 23 February 2018 в 05:58
  • 3
    Обратите внимание, что getResourceUrl не находится в последнем sdk. – Martin Serrano 21 March 2018 в 23:01
  • 4
    Он все еще там. Возможно, вам придется отдать интерфейс (AmazonS3) классу (AmazonS3Client). – hussachai 22 March 2018 в 06:57
  • 5
    для последнего sdk s3Client.getUrl("your-bucket", "some-path/some-key.jpg").toString(); появится общий URL. – kristianva 11 June 2018 в 16:34

Вы можете самостоятельно решить эту проблему и указать имя файла в запросе на загрузку.

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

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

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

https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename
68
ответ дан Jeffrey Kemp 18 August 2018 в 17:51
поделиться
        System.out.println("Link : " + s3Object.getObjectContent().getHttpRequest().getURI());

с этим вы можете получить ссылку на уже загруженный файл в ведро S3.

0
ответ дан Omkar Ayachit 18 August 2018 в 17:51
поделиться

немного устарел, но все еще для тех, кто наткнется на это в будущем:

вы можете сделать это с одной строкой, если вы уже писали 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
);
1
ответ дан rollcage 18 August 2018 в 17:51
поделиться
Другие вопросы по тегам:

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