Fichier de téléchargement d’Amazon S3 et obtention de l’URL

Est-il possible de télécharger un fichier txt / pdf / png sur Amazon S3 en une seule action et d’obtenir l’URL du fichier téléchargé en réponse? Si oui, AWS Java sdk est-il la bonne bibliothèque que je dois append dans mon application Web java struts2.

S’il vous plaît me suggérer une solution pour cela.

Pour rendre le fichier public avant le téléchargement, vous pouvez utiliser la méthode PutObjectRequest de PutObjectRequest :

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

Non, vous ne pouvez pas obtenir l’URL en une seule action mais deux 🙂

Tout d’abord, vous devrez peut-être rendre le fichier public avant de le télécharger, car cela n’a aucun sens d’obtenir l’URL à laquelle personne ne peut accéder. Vous pouvez le faire en définissant ACL comme suggéré par Michael Astreiko. Vous pouvez obtenir l’URL de la ressource en appelant getResourceUrl ou 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"); 

Note 1: La différence entre getResourceUrl et getUrl est que getResourceUrl renverra null lorsqu’une exception se produit.

Remarque2: la méthode getUrl n’est pas définie dans l’interface AmazonS3. Vous devez convertir l’object en AmazonS3Client si vous utilisez le générateur standard.

Vous pouvez vous débrouiller avec le compartiment et le nom de fichier que vous spécifiez dans la demande de téléchargement.

Par exemple, si votre mybucket est mybucket et que votre fichier s’appelle myfilename :

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

Le bit s3 sera différent selon la région dans laquelle se trouve votre compartiment. Par exemple, j’utilise la région Asie du sud-est pour que mes URL soient comme:

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

un peu vieux mais toujours pour quiconque trébuche sur cela à l’avenir:

vous pouvez le faire avec une ligne en supposant que vous avez déjà écrit CredentialProvider et AmazonS3Client.

Il ressemblera à ceci:

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

et si vous n’avez pas écrit le CredentialProvider et AmazonS3Client, ajoutez-les simplement avant d’obtenir l’URL suivante:

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

De même, si vous souhaitez un lien via s3Client, vous pouvez utiliser ci-dessous.

 System.out.println("filelink: " + s3Client.getUrl("your_bucket_name", "your_file_key")); 
  System.out.println("Link : " + s3Object.getObjectContent().getHttpRequest().getURI()); 

avec cela, vous pouvez récupérer le lien du fichier déjà téléchargé vers le compartiment S3.