我正在使用谷歌的php客户端库与gmail对话。
我试图使用此API报告附件的文件大小。
为了测试这个,我给自己发了一封附有附件的电子邮件。我知道这个附件的大小是511 be。gmail web ui将此附件报告为499 is,我认为它足够接近:

然而,当我使用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显示的内容与附件的实际大小之间略有脱节。但奇怪的是:
当我请求整条讯息 (不仅仅是附件)时,这样的请求如下:
GET https://www.googleapis.com/gmail/v1/users/me/messages/14ef5015d08312fd?key={YOUR_API_KEY}我得到了这样的回应:
"body": {
"attachmentId": "ANGjdJ9P-2Q_1lMch1_smv_ZKACDE_QRtBisZ8bAWP1x_-ze8tvQiQunNCjcWUDkv2kjZo67AETe6Zmti5YZ3Zl4-EyaNtbtfxWOHBhTqQFSK673hZhEWW8Bg7Ul4ws2eOSYXrZsvWY8NhLptXJP5PM0W30LZk2sHj4XLWlmU64YxMPAOXwLOT1FeNc3EgVvlKJFQv1sUVajmA6c1K_qKgH_Y_c56fSJAz9aFRoh9RW6wvkhTV5NeLm9WFghkzpInwz6cm-DyJQhY-eOZLE2mvqQ4EmCPmBgzwNDh29mqQ",
"size": 699004
}因此,我正在寻找的ID附件的大小似乎是699 of,而不是真正的511 of大小。这似乎是编码附件的大小,而不是原始文件。
因此,使用attachment库,当我有一个Google_Service_Gmail_MessagePart表示这个附件,并调用$messagepart->getBody()->getSize()时,它返回699004。
我需要的是附件的真实大小,510808。
我如何才能得到这个真正的大小,而且gmail中是否有错误在这个上下文中显示错误的大小?
发布于 2015-08-03 21:53:28
恐怕这是base64 64编码的缺点。
粗略地说,Base64 64编码的二进制数据的最终大小等于原始数据大小+ 814字节(用于标头)的1.37倍。解码数据的大小可以用以下公式近似: 字节= (string_length(encoded_string) - 814) / 1.37 维基百科
这非常适合您的示例(511 * 1.37≈700)。
https://stackoverflow.com/questions/31797220
复制相似问题