it-roy-ru.com

Amazon S3 загрузить файл и получить URL

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

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

75
Sangram Anand

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

Примечание 2: getUrl метод не определен в интерфейсе AmazonS3. Вы должны привести объект к AmazonS3Client, если вы используете стандартный компоновщик.

79
hussachai

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

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

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

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

https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename
74
Jeffrey Kemp

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

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

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

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

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

0
Omkar Ayachit