I am testing how to update user picture using the Admin SDK Directory Service with Google Apps Scripts with the following function:
function updatePhoto(){
var fileId = 'XXXXXXXXXXXXXXXXXXX';
var b = DocsList.getFileById(fileId).getBlob();
var encoded = Utilities.base64Encode(b.getBytes());
encoded = encoded.replace(///g,'_').replace(/+/g,'-').replace(/=/g,'*');
AdminDirectory.Users.Photos.update({
"photoData": encoded },'harry.potter@abc.edu.hk');
}
However, it doesn't always work. Whenever there is padding in the base64 encoded string, it fails. Referring to Google's document (https://developers.google.com/admin-sdk/directory/v1/reference/users/photos/update), I am a bit confused with the descriptions. It says:
- The equals sign (=) character is replaced with the asterisk (*).
- For padding, the period (.) character is used instead of the
RFC-4648 baseURL definition which uses the equals sign (=) for
padding. This is done to simplify URL-parsing.
What should be actually done? (=) is used for padding in Base64. So, should I use (*) or (.)? I did try to replace (=) with (.) but no luck.
Can anyone help?
It is so strange. It works when i do not replace (=).
function updatePhoto(){
var fileId = 'XXXXXXXXXXXXXXXXXXX';
var b = DocsList.getFileById(fileId).getBlob();
var encoded = Utilities.base64Encode(b.getBytes());
encoded = encoded.replace(///g,'_').replace(/+/g,'-');
AdminDirectory.Users.Photos.update({
"photoData": encoded },'harry.potter@abc.edu.hk');
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…