2015-08-03 21 views
5

के साथ डीकोडेड अनुलग्नक फ़ाइल आकार प्राप्त करें मैं जीमेल एपीआई से बात करने के लिए Google के php client library का उपयोग कर रहा हूं।जीमेल एपीआई

मैं इस एपीआई का उपयोग कर अनुलग्नक के फ़ाइल आकार की रिपोर्ट करने का प्रयास कर रहा हूं।

मैं इसका परीक्षण करने के लिए, मैंने खुद को एक अनुलग्नक के साथ एक ईमेल भेजा। मैं 511 केबी होने के लिए इस अनुलग्नक का आकार जानता था। जीमेल वेब ui रिपोर्ट 499KB है, जो मुझे लगता है के रूप में इस लगाव काफी करीब है:

499KB image

जब मैं इस छवि का उपयोग कर gmail json api, तथापि, मैं सही अनुलग्नक आकार मिलता है लाने:

GET https://www.googleapis.com/gmail/v1/users/me/messages/14ef5015d08312fd/attachments/ANGjdJ-Yy2H2avT5aFV7akMM2Lp4NigSpHqKgMT48zUMPVe3l6B9U0cfs-jXYD3cWJPhEwVjXQxNg2ZGDBFXKpMnf1HbpoBCwzcuOYSAJmHBbMHGANWKynofHf5GyStvjHhvNpA5xwla2hj7zdm6SVISoMgAR-dHJIPXbRniHVdryv13bxNsUeuRFvYbktnAcIwi-ppD6C1VAJtnGQYIKtNjsOa68hOlMSGLByWOrbB2txEN_P4cM43U7SEEzFmIDjFhKGkEIiU1rvrf9WT8KFVTsJ1U9_nTFjfkXIjl_Q?key={YOUR_API_KEY} 

रिटर्न

{ 
"size": 510808, 
"data": "encoded_data_string_uiasd82187" 
} 

तो वहाँ क्या जीमेल वेब UI शो और क्या actua के बीच एक मामूली डिस्कनेक्ट है अनुलग्नक का एल आकार है।

GET https://www.googleapis.com/gmail/v1/users/me/messages/14ef5015d08312fd?key={YOUR_API_KEY} 

मैं इस तरह एक json प्रतिक्रिया मिल:

जब मैं इस तरह के अनुरोध whole message (न केवल लगाव) के लिए एक अनुरोध बनाने उर्फ,: लेकिन यहाँ है जहाँ यह अजीब हो जाता है

"body": { 
    "attachmentId": "ANGjdJ9P-2Q_1lMch1_smv_ZKACDE_QRtBisZ8bAWP1x_-ze8tvQiQunNCjcWUDkv2kjZo67AETe6Zmti5YZ3Zl4-EyaNtbtfxWOHBhTqQFSK673hZhEWW8Bg7Ul4ws2eOSYXrZsvWY8NhLptXJP5PM0W30LZk2sHj4XLWlmU64YxMPAOXwLOT1FeNc3EgVvlKJFQv1sUVajmA6c1K_qKgH_Y_c56fSJAz9aFRoh9RW6wvkhTV5NeLm9WFghkzpInwz6cm-DyJQhY-eOZLE2mvqQ4EmCPmBgzwNDh29mqQ", 
    "size": 699004 
    } 

तो आईडी के साथ लगाव जो मुझे लगता है वह 69 9 केबी का आकार है, न कि 511 केबी सही आकार। यह कच्ची फ़ाइल के बजाय एन्कोडेड लगाव का आकार प्रतीत होता है।

तो, पीएचपी क्लाइंट लाइब्रेरी का उपयोग कर जब मैं एक Google_Service_Gmail_MessagePart इस लगाव का प्रतिनिधित्व है, और मुझे $messagepart->getBody()->getSize() फोन इस रिटर्न 699004.

क्या मैं जरूरत लगाव का सही आकार है, 510808.

मैं यह सही आकार कैसे प्राप्त कर सकता हूं, और क्या इस संदर्भ में गलत आकार दिखाते हुए जीमेल एपीआई में एक बग है?

+0

मैंने Google Apps API मुद्दे पर एक [बग] (https://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=4498) दायर किया है ट्रैकर। – Rafa

उत्तर

1

यह बेस 64-एन्कोडिंग का नकारात्मक हिस्सा है, मुझे डर है।

बहुत मोटे तौर पर, Base64- एन्कोड बाइनरी डेटा के अंतिम आकार 1.37 गुना मूल डेटा आकार + 814 बाइट (हेडर के लिए) के बराबर है। -/1,37

विकिपीडिया

यह बहुत अच्छी तरह से अपने उदाहरण से फिट बैठता है (511

बाइट्स = (814 STRING_LENGTH (encoded_string)): डीकोड डेटा का आकार इस फार्मूले के साथ अनुमान लगाया जा सकता * 1.37 ≈ 700)।

+0

मैं इसका उपयोग कर रहा हूं लेकिन लगातार 814 को अनदेखा कर रहा हूं - बड़ी फाइलों के लिए, यह महत्वपूर्ण नहीं होगा और बहुत छोटी फाइलों के लिए यह भ्रामक होगा (एक 500 बाइट फ़ाइल ~ -500 दिखाई देगी, जो सुपर गलत लगता है) । – johncorser

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