使用gmail API获取已解码的附件文件大小

时间:2015-08-03 21:42:36

标签: php google-api google-api-php-client gmail-api

我正在使用谷歌的php client library与gmail api交谈。

我正在尝试使用此API报告附件的文件大小。

我要测试一下,我给自己发了一封带附件的电子邮件。我知道这个附件的大小是511KB。 gmail web 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"
}

因此,gmail Web UI显示的内容与附件的实际大小之间存在轻微的脱节。但在这里它变得奇怪:

当我请求whole message(不仅仅是附件)aka时,请求是这样的:

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

我得到了像这样的json回复:

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

因此,我正在寻找ID的附件似乎有699KB的大小,而不是511KB的真实大小。这似乎是编码附件的大小而不是原始文件。

因此,使用PHP客户端库,当我有Google_Service_Gmail_MessagePart代表此附件时,我调用$messagepart->getBody()->getSize(),这将返回699004。

我需要的是附件的真实尺寸,510808。

如何获得这个真实大小,并且gmail API中是否存在显示此上下文中错误大小的错误?

1 个答案:

答案 0 :(得分:1)

这是base64编码的缺点,我很害怕。

  

非常粗略地说,Base64编码的二进制数据的最终大小等于   原始数据大小的1.37倍+ 814字节(用于标题)。解码数据的大小可以用这个公式近似:

     

bytes =(string_length(encoded_string) - 814)/ 1.37

     

维基百科

这非常适合你的例子(511 *1.37≈700)。

相关问题