2015-08-03 15 views
5

Tôi đang sử dụng số php client library của google để nói chuyện với api gmail.Nhận kích thước tệp đính kèm được giải mã với API gmail

Tôi đang cố báo cáo kích thước tệp của tệp đính kèm bằng API này.

Tôi để kiểm tra điều này, tôi đã gửi cho mình một email có tệp đính kèm. Tôi biết kích thước của tập tin đính kèm này là 511KB. Các báo cáo gmail web ui tập tin đính kèm này là 499KB, mà tôi giả sử là gần đủ:

499KB image

Khi tôi lấy hình ảnh này bằng cách sử dụng gmail json api, tuy nhiên, tôi làm có được kích thước tập tin đính kèm đúng:

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

lợi nhuận

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

Vì vậy, có sự phân cách nhỏ giữa những gì gmail web UI chương trình và những gì Actua l kích thước của tập tin đính kèm là. Nhưng đây là nơi nó được kỳ lạ:

Khi tôi thực hiện một yêu cầu cho whole message (không chỉ tập tin đính kèm) hay còn gọi là, một yêu cầu như thế này:

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

tôi nhận được một phản ứng json như thế này:

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

Vì vậy, tệp đính kèm có ID mà tôi đang tìm kiếm dường như có kích thước 699KB, KHÔNG phải kích thước đúng 511KB. Điều này có vẻ là kích thước của tệp đính kèm được mã hóa chứ không phải tệp thô.

Vì vậy, sử dụng thư viện client PHP, khi tôi có một Google_Service_Gmail_MessagePart đại diện cho tập tin đính kèm này, và tôi gọi $messagepart->getBody()->getSize() này trả 699004.

Những gì tôi cần là kích thước thực sự của tập tin đính kèm, 510808.

Làm cách nào tôi có thể nhận được kích thước thật này và có lỗi trong API gmail hiển thị kích thước sai trong ngữ cảnh này không?

+0

Tôi đã gửi [lỗi] (https://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=4498) về vấn đề API Google Apps theo dõi. – Rafa

Trả lời

1

Đó là nhược điểm của mã hóa base64, tôi sợ.

Rất gần, kích thước cuối cùng của dữ liệu nhị phân được mã hóa Base64 bằng 1,37 lần kích thước dữ liệu gốc + 814 byte (cho tiêu đề). Kích thước của dữ liệu được giải mã có thể xấp xỉ với công thức này:

byte = (STRING_LENGTH (encoded_string) - 814)/1,37

Wikipedia

này phù hợp ví dụ của bạn rất tốt (511 * 1,37 ≈ 700).

+0

Tôi sử dụng điều này nhưng bỏ qua hằng số 814 - đối với các tệp lớn, điều này sẽ không đáng kể và đối với các tệp rất nhỏ, nó sẽ gây hiểu lầm (tệp 500 byte có vẻ như ~ -500, có vẻ như siêu sai) . – johncorser

Các vấn đề liên quan