将字符串转换为Web安全的Base64格式

use*_*013 2 google-apps-script google-admin-sdk

我正在测试如何使用带有Google Apps脚本的Admin SDK目录服务更新用户图片,具有以下功能:

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');
}
Run Code Online (Sandbox Code Playgroud)

但是,它并不总是有效.只要base64编码的字符串中有填充,它就会失败.参考Google的文档(https://developers.google.com/admin-sdk/directory/v1/reference/users/photos/update),我对这些说明感到有些困惑.它说:

  1. 等号(=)字符替换为星号(*).
  2. 对于填充,使用句点(.)字符而不是RFC-4648 baseURL定义,该定义使用等号(=)进行填充.这样做是为了简化URL解析.

应该做什么?(=)用于Base64中的填充.那么,我应该使用(*)还是(.)?我确实尝试用(.)替换(=)但没有运气.

有人可以帮忙吗?


太奇怪了.当我不替换(=)时,它工作.

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');
Run Code Online (Sandbox Code Playgroud)

}

Jay*_*Lee 6

API要求您使用URL安全的base64编码.做base64编码后,尝试更换/_+-.详细信息:

https://developers.google.com/admin-sdk/directory/v1/reference/users/photos/update