2013-06-01 11 views
7

Poleconych postów Amazon S3 & Checksum, How to encode md5 sum into base64 in BASHJak programowo uzyskać MD5 pliku Amazon S3 przy użyciu boto

muszę pobrać plik tar z S3 wiadra z ograniczonym dostępem. [Głównie uprawnienia dostępu podano jedynie pobrać]

Po ściągnięciu muszę sprawdzić sumę kontrolną MD5 pobranego pliku przeciwko MD5-Check Sum danych występujących w postaci metadanych w S3

I obecnie używać S3 przeglądarka plików, aby ręcznie zanotować "x-amz-meta-md5" nagłówka treści i sprawdzić poprawność tej wartości w stosunku do obliczonego md5 pobranego pliku.

Chciałbym wiedzieć, czy istnieje sposób programistycznego użycia boto do przechwytywania wartości mieszania md5 pliku S3, jak wspomniano jako metadane.

from boto.s3.connection import S3Connection 

conn = S3Connection(access_key, secret_key) 
bucket=conn.get_bucket("test-bucket") 
rs_keys = bucket.get_all_keys() 
for key_val in rs_keys: 
    print key_val, key_val.**HOW_TO_GET_MD5_FROM_METADATA(?)** 

Proszę poprawić, jeśli moje zrozumienie jest błędne. Szukam sposobu na pozyskiwanie danych nagłówka programowo

Odpowiedz

9

Kiedy boto pobiera plik korzystając z jednej z metod get_contents_to_*, to oblicza sumę MD5 bajtów to pliki do pobrania i sprawia, że ​​dostępna jako atrybut obiektu Keymd5 . Ponadto S3 wysyła nagłówek ETag w odpowiedzi, która reprezentuje koncepcję serwera na temat sumy kontrolnej MD5. Jest dostępny jako atrybut etag obiektu Key. Tak więc po pobraniu pliku wystarczy porównać wartość tych dwóch atrybutów, aby sprawdzić, czy pasują do siebie.

Jeśli chcesz dowiedzieć się, co S3 uważa, że ​​MD5 jest bez faktycznie pobieranie pliku (jak pokazano w przykładzie) może po prostu to zrobić:

for key_val in rs_keys: 
    print key_val, key_val.etag 
+2

Dzięki za sugestię. Wartość Etag wydaje się nie zgadzać z sumą kontrolną MD5. Widziałam również w wymienionych postach, że etag nie jest odpowiednią wartością MD5. "x-amz-meta-md5" jest kluczem w mojej przeglądarce plików S3, która daje mi wartość MD5. Ale ten klucz nie jest dostępny w programach metadanych lub nagłówków treści. – user1652054

+3

Atrybut '' etag'' będzie miał postać '' '797cc49509a9df16481fac4fae144e0a" '' podczas gdy atrybut '' md5'' będzie '' 797cc49509a9df16481fac4fae144e0a''. Zwróć uwagę na otaczające podwójne cudzysłowy w '' etag''. Musisz wziąć to pod uwagę przy porównywaniu wartości. Klucz '' x-amz-meta-md5'' nie jest standardową wartością metadanych S3, ale niestandardową. Być może zostało to dodane przez przeglądarkę plików S3? – garnaat

+5

Jeszcze jeden komentarz. Sprawdziłem kod źródłowy boto i potwierdziłem, że boto automatycznie sprawdza wartość nagłówka 'etag'' z obliczonym' 'md5'' podczas pobierania pliku. Podniesie wyjątek '' S3DataError'', jeśli nie pasuje. – garnaat

6

Wydaje dobrze ustalone, że ETag nie jest suma md5, jeśli plik został złożony po uruchomieniu przesyłania wieloczęściowego. Myślę, że w tym przypadku jedynym wyjściem jest pobranie pliku i wykonanie lokalnej sumy kontrolnej. Jeśli wynik jest poprawny, kopia S3 musi być dobra. Jeśli lokalna suma kontrolna jest błędna, kopia s3 może być zła lub pobieranie mogło się nie udać. Jeśli nie masz już oryginalnego pliku lub zapisu jego sumy md5, myślę, że nie masz szczęścia. Byłoby wspaniale, gdyby dostępna była suma md5 zmontowanego pliku, lub gdyby istniał sposób lokalnego obliczania oczekiwanego etag pliku, który ma być przesłany przez wieloczęściowy.

Powiązane problemy