tutorial example aws java amazon-s3 amazon-web-services

java - example - Amazon S3 carga el archivo y obtiene la URL



aws-java-sdk-s3 (6)

Del mismo modo, si desea un enlace a través de s3Client puede utilizar a continuación.

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

¿Es posible cargar un archivo txt / pdf / png en Amazon S3 en una sola acción y obtener la URL del archivo cargado como respuesta? Si es así, AWS Java sdk es la biblioteca correcta que necesito agregar en mi aplicación web Java struts2.

Por favor sugiérame una solución para esto.


No, no puedes obtener la URL en una sola acción sino dos :)

Antes que nada, es posible que tengas que hacer que el archivo sea público antes de subirlo porque no tiene sentido obtener la URL a la que nadie puede acceder. Puede hacerlo configurando ACL como sugirió Michael Astreiko. Puede obtener la URL del recurso llamando a getResourceUrl o 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");

Nota 1: La diferencia entre getResourceUrl y getUrl es que getResourceUrl devolverá null cuando se produce una excepción.

getUrl : el método getUrl no está definido en la interfaz de AmazonS3. Tienes que lanzar el objeto a AmazonS3Client si usas el constructor estándar.


Puede resolverlo por sí mismo dado el depósito y el nombre de archivo que especifique en la solicitud de carga.

por ejemplo, si tu cubo es mybucket y tu archivo se llama myfilename :

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

El bit s3 será diferente según la región en la que se encuentre el contenedor. Por ejemplo, utilizo la región de Asia sudoriental, por lo que mis URL son como:

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


un poco viejo, pero aún así para cualquiera que tropiece con esto en el futuro:

puede hacerlo con una línea suponiendo que ya haya escrito CredentialProvider y AmazonS3Client.

se verá así:

String ImageURL = String.valueOf(s3.getUrl( ConstantsAWS3.BUCKET_NAME, //The S3 Bucket To Upload To file.getName())); //The key for the uploaded object

y si no escribió CredentialProvider y AmazonS3Client, simplemente agréguelos antes de obtener la URL de esta manera:

CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( getApplicationContext(), "POOL_ID", // Identity pool ID Regions.US_EAST_1 // Region );


Para que el archivo sea público antes de subirlo, puede usar el método PutObjectRequest de PutObjectRequest :

myAmazonS3Client.putObject(new PutObjectRequest(''some-grails-bucket'', ''somePath/someKey.jpg'', new File(''/Users/ben/Desktop/photo.jpg'')).withCannedAcl(CannedAccessControlList.PublicRead))


System.out.println("Link : " + s3Object.getObjectContent().getHttpRequest().getURI());

con esto puede recuperar el enlace del archivo ya cargado en el depósito S3.