2013-06-01 7 views
7

भेजा पोस्ट का उपयोग कर अमेज़न S3 फ़ाइल का MD5 चेकसम पाने के लिए: Amazon S3 & Checksum, How to encode md5 sum into base64 in BASHकैसे प्रोग्राम के रूप में Boto

मैं सीमित पहुंच के साथ S3 बाल्टी से एक टार फ़ाइल डाउनलोड करने के लिए किया है। बाद मैं मैं S3

में मेटाडाटा के रूप में उपस्थित डेटा

मैं वर्तमान में एक का उपयोग का MD5-चेक योग के खिलाफ डाउनलोड की गई फ़ाइल का md5 जांच राशि की जांच करने के लिए है डाउनलोड

[अधिकतर पहुँच अनुमतियाँ डाउनलोड करने के लिए केवल दिया] सामग्री शीर्षलेख के "x-amz-meta-md5" मैन्युअल रूप से नोट करने के लिए S3 फ़ाइल ब्राउज़र और डाउनलोड की गई फ़ाइल के गणना एमडी 5 के विरुद्ध उस मान को मान्य करें।

मैं अगर वहाँ Boto का उपयोग कर के रूप में मेटाडाटा के रूप में उल्लेख किया है एक S3 फ़ाइल का MD5 हैश मान कब्जा करने के लिए कार्यक्रम संबंधी तरीका है पता करना चाहते हैं।

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(?)** 

अगर मेरी समझ गलत है तो कृपया सही करें। मैं एक तरह से हैडर डेटा पर कब्जा करने के प्रोग्राम के रूप में

उत्तर

9

जब Boto get_contents_to_* से किसी भी विधि का उपयोग कर एक फ़ाइल डाउनलोड करता है, यह बाइट्स इसके डाउनलोड का MD5 चेकसम गणना करता रहा हूँ और उस Key वस्तु की md5 विशेषता के रूप में उपलब्ध हो जाता है । इसके अलावा, एस 3 प्रतिक्रिया में ETag शीर्षलेख भेजता है जो एमडी 5 चेकसम के बारे में सर्वर के विचार का प्रतिनिधित्व करता है। यह Key ऑब्जेक्ट की etag विशेषता के रूप में उपलब्ध है। तो, फ़ाइल डाउनलोड करने के बाद आप उन दो विशेषताओं के मूल्य की तुलना कर सकते हैं ताकि वे यह देख सकें कि वे मेल खाते हैं या नहीं।

आप क्या S3 सोचता MD5 वास्तव में फ़ाइल डाउनलोड (के रूप में अपने उदाहरण में दिखाया गया) के बिना तुम सिर्फ ऐसा कर सकता है है पता लगाने के लिए चाहते हैं:

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

सुझाव के लिए धन्यवाद। एटाग मान गणना की गई एमडी 5 चेक योग से मेल नहीं खाता है। मैंने निर्दिष्ट पदों में भी देखा कि ईटीएजी एमडी 5 का उचित मूल्य नहीं है। "x-amz-meta-md5" मेरे S3 फ़ाइल ब्राउज़र में कुंजी है जो मुझे MD5 मान देता है। लेकिन, यह कुंजी प्रोग्रामेटिक रूप से प्राप्त होने के लिए मेटाडेटा या सामग्री शीर्षकों में उपलब्ध नहीं है। – user1652054

+3

'' etag'' विशेषता प्रपत्र '' "797cc49509a9df16481fac4fae144e0a" '' '' जबकि md5'' विशेषता प्राप्त होगी '' 797cc49509a9df16481fac4fae144e0a'' का हो जाएगा। 'Etag'' में संलग्न डबल-कोट्स पर ध्यान दें। मूल्यों की तुलना करते समय आपको इसे ध्यान में रखना होगा। 'X-amz-meta-md5'' कुंजी मानक S3 मेटाडेटा मान नहीं है बल्कि एक कस्टम है। शायद एस 3 फाइल ब्राउज़र द्वारा जोड़ा गया है? – garnaat

+5

एक अन्य टिप्पणी। मैंने बोटो स्रोत कोड की समीक्षा की और पुष्टि की कि फ़ाइल डाउनलोड करते समय गणना की गई '' md5'' के साथ स्वचालित रूप से '' etag'' शीर्षलेख के मान को चेक करता है। यदि वे मेल नहीं खाते हैं तो यह 'S3DataError' अपवाद बढ़ाएगा। – garnaat

6

यह अच्छी तरह से स्थापित लगता है कि ETag नहीं है md5sum अगर बहु-भाग अपलोड चलाने के बाद फ़ाइल को इकट्ठा किया गया था। मुझे लगता है कि उस मामले में एकमात्र सहारा फ़ाइल डाउनलोड करना और स्थानीय रूप से चेकसम करना है। यदि परिणाम सही है, तो एस 3 कॉपी अच्छी होनी चाहिए। यदि स्थानीय चेकसम गलत है, तो एस 3 कॉपी खराब हो सकती है, या डाउनलोड विफल हो सकता है। यदि आपके पास अब मूल फ़ाइल या उसके md5sum का रिकॉर्ड नहीं है, तो मुझे लगता है कि आप भाग्य से बाहर हैं। यह बहुत अच्छा होगा अगर एकत्रित फ़ाइल का md5sum उपलब्ध था, या यदि मल्टीपार्ट के माध्यम से अपलोड की जाने वाली फ़ाइल की अपेक्षित ईटैग की स्थानीय रूप से गणना करने का कोई तरीका था।

संबंधित मुद्दे