2015-08-03 13 views
5

Sto utilizzando google's php client library per parlare con l'API gmail.Ottieni dimensioni del file allegato decodificato con API gmail

Sto tentando di segnalare la dimensione del file di un allegato utilizzando questa API.

Per verificarlo, mi sono inviato un'email con un allegato. Sapevo che le dimensioni di questo allegato erano 511 KB. Le relazioni gmail web ui questo attaccamento come 499KB, che suppongo sia abbastanza vicino:

499KB image

Quando vado a prendere questa immagine utilizzando il gmail json api, però, io capisco il formato del collegamento corretto:

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

rendimenti

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

per cui v'è un leggero scollamento tra ciò che gli spettacoli di interfaccia utente di Gmail web e ciò che l'Actua La dimensione dell'allegato è. Ma qui è dove ottiene strano:

Quando faccio una richiesta per l'whole message (non solo l'allegato) alias, una richiesta come questa:

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

ottengo una risposta JSON come questo:

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

Quindi l'allegato con l'ID che sto cercando sembra avere una dimensione di 699 KB, NON la dimensione reale di 511 KB. Sembra essere la dimensione dell'allegato codificato piuttosto che il file raw.

Quindi, utilizzando la libreria client PHP, quando ho un Google_Service_Gmail_MessagePart che rappresenta questo attaccamento, e che io chiamo $messagepart->getBody()->getSize() restituisce 699004.

cosa ho bisogno è la vera dimensione dell'allegato, 510808.

Come posso ottenere questa dimensione vera e c'è un bug nell'API di Gmail che mostra la dimensione sbagliata in questo contesto?

+0

Ho archiviato un [bug] (https://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=4498) sul problema delle API di Google Apps tracker. – Rafa

risposta

1

Questo è il lato negativo della codifica in base64, temo.

molto approssimativamente, la dimensione finale dei dati binari con codifica Base64 è uguale a 1,37 volte la dimensione dei dati originali + 814 byte (per le intestazioni). La dimensione dei dati decodificati può essere approssimata con questa formula:

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

Wikipedia

Questo si adatta tuo esempio molto bene (511 * 1,37 ≈ 700).

+0

Lo sto usando ma ignorando la costante 814 - per file di grandi dimensioni, questo non sarà significativo e per file molto piccoli sarà fuorviante (un file di 500 byte sembrerebbe essere ~ -500, che sembra super sbagliato) . – johncorser

Problemi correlati