Voici encore une autre pièce du puzzle du défi AWS.
Pour information, cette réponse suppose que vous avez déjà compris comment calculer le "MD5 des parties MD5" et que vous pouvez reconstruire votre ETag multipartite AWS à partir de toutes les autres réponses déjà fournies ici.
Cette réponse répond à l'inconvénient d'avoir à "deviner" ou à "deviner" la taille de la pièce téléchargée à l'origine.
Nous utilisons plusieurs outils différents pour le téléchargement vers S3 et ils semblent tous avoir des tailles de parties à télécharger différentes, donc "deviner" n'était pas vraiment une option. De plus, nous avons beaucoup de fichiers qui ont été téléchargés par le passé lorsque la taille des parties semblait être différente. Par ailleurs, la vieille astuce consistant à utiliser une copie de serveur interne pour forcer la création d'un ETag de type MD5 ne fonctionne plus non plus, car AWS a modifié ses copies de serveur interne pour qu'elles utilisent également le multipart (mais avec une taille de partie assez importante).
Alors... Comment pouvez-vous déterminer la taille de la pièce de l'objet ?
Si vous effectuez d'abord une requête head_object et détectez que l'ETag est un ETag de type multipart (incluant un '-<partcount>' à la fin), vous pouvez effectuer une autre requête head_object, mais avec un attribut part_number supplémentaire de 1 (la première partie). Cette requête head_object suivante vous renverra alors le content_length de la première partie. Et voilà... Vous connaissez maintenant la taille de la partie qui a été utilisée et vous pouvez utiliser cette taille pour recréer votre ETag local qui devrait correspondre à l'ETag S3 original créé lors du téléchargement de l'objet.
De plus, si vous voulez être précis (peut-être que certains téléchargements en plusieurs parties utilisent des tailles de parties variables), vous pouvez continuer à appeler les requêtes head_object avec chaque numéro de partie spécifié et calculer le MD5 de chaque partie à partir de la longueur du contenu des parties retournées.
J'espère que cela vous aidera...