Ich bekomme das MD5 einer lokalen Datei, aber es ist anders als das MD5 (eTag) der "gleichen" Datei in Amazon S3. Was ich erreichen möchte, ist herauszufinden, ob die letzten Dateien, die ich in S3 habe, die gleichen sind, die ich lokal habe. Wenn ich MD5 nicht vergleichen kann, wie soll ich das dann machen?
Generieren von MD5 aus der lokalen Datei (abgeschnittenen Code):
%Vor%Abrufen von MD5 (eTag) von S3 (abgeschnittenen Code):
%Vor% PS: Ich benutze org.apache.commons.codec.digest.DigestUtils
und com.google.common.io.Files
Bibliotheken.
Berechnet das MD5 des gerade berechneten MD5. Siehe DigestUtils.md5Hex Dokumentation .
hashtext
ist tatsächlich MD5 (MD5 (Datei)) und nicht MD5 (Datei).
Brunos Antwort bringt es zum Ausdruck, aber ich möchte darauf hinweisen, dass wenn Sie dies ohne die Google Guava-Abhängigkeit tun wollen, es nicht so schwierig ist (besonders seit / wenn Sie bereits Apache Commons verwenden)
Sie würden das ersetzen:
%Vor%damit (mit einem Java 7-Versuch-Initialisierungs-Block):
%Vor%Dies md5 ( InputStream) -Methode ist in Apache Commons seit Version 1.4.
Dies ist meine eigene Implementierung von S3 eTag. Ich habe es mit einer großen Datei getestet, die ich auf S3 hochgeladen habe, um einen Referenzwert für mehrteiliges eTag zu erhalten.
Denken Sie daran, dass die Komprimierung und die clientseitige Verschlüsselung eTag für die Überprüfung heruntergeladener Dateien unbrauchbar machen.
Etag.java
%Vor%EtagTest.java
%Vor%GarbageTools.java
%Vor%