Est-il possible d’effectuer un téléchargement par lot sur amazon s3?

Est-ce que amazon s3 prend en charge les téléchargements par lots? J’ai un travail qui doit télécharger chaque nuit ~ 100K de fichiers pouvant atteindre 1G, mais qui est fortement orienté vers les petits fichiers (90% ont moins de 100 octets et 99% ont moins de 1000 octets).

L’API s3 prend-elle en charge le téléchargement de plusieurs objects dans un seul appel HTTP?

Tous les objects doivent être disponibles dans S3 en tant qu’objects individuels. Je ne peux pas les héberger ailleurs (FTP, etc.) ou dans un autre format (firebase database, lecteur local EC2, etc.). C’est une exigence externe que je ne peux pas changer.

L’API s3 prend-elle en charge le téléchargement de plusieurs objects dans un seul appel HTTP?

Non, l’opération S3 PUT ne prend en charge que le téléchargement d’un object par requête HTTP.

Vous pouvez installer S3 Tools sur votre ordinateur que vous souhaitez synchroniser avec le compartiment distant et exécuter la commande suivante:

s3cmd sync localdirectory s3://bucket/ 

Vous pouvez ensuite placer cette commande dans un script et créer un travail planifié pour exécuter cette commande chaque nuit.

Cela devrait faire ce que vous voulez.

L’outil effectue la synchronisation des fichiers en fonction des hachages MD5 et de la taille des fichiers, de sorte que les collisions doivent être rares (si vous le souhaitez, vous pouvez simplement utiliser la commande “s3cmd put” pour forcer le remplacement des objects dans votre compartiment cible).

EDIT: Assurez-vous également de lire la documentation sur le site que j’ai lié à S3 Tools – il existe différents indicateurs nécessaires pour savoir si vous souhaitez que les fichiers supprimés localement soient supprimés du compartiment ou ignorés, etc.

Vous pouvez également télécharger S3 via l’ outil AWS CLI à l’aide de la commande sync .

aws s3 sync local_folder s3: // nom du compartiment

Vous pouvez utiliser cette méthode pour transférer des fichiers par lots vers S3 très rapidement.

Un fichier (ou une partie d’un fichier) = une requête HTTP, mais l’API Java prend désormais en charge le téléchargement de plusieurs fichiers sans avoir à écrire le multithreading par vous-même, à l’aide de TransferManager

Si vous voulez utiliser le programme Java pour le faire, vous pouvez faire:

 public void uploadFolder(Ssortingng bucket, Ssortingng path, boolean includeSubDirectories) { File dir = new File(path); MultipleFileUpload upload = transferManager.uploadDirectory(bucket, "", dir, includeSubDirectories); try { upload.waitForCompletion(); } catch (InterruptedException e) { e.printStackTrace(); } } 

La création de s3client et du gestionnaire de transfert pour se connecter au S3 local si vous souhaitez tester est comme ci-dessous:

  AWSCredentials credentials = new BasicAWSCredentials(accessKey, token); s3Client = new AmazonS3Client(credentials); // This is deprecated but you can create using standard beans provided by spring/aws s3Client.setEndpoint("http://127.0.0.1:9000");//If you wish to connect to local S3 using minio etc... TransferManager transferManager = TransferManagerBuilder.standard().withS3Client(s3Client).build();