首页 > 解决方案 > GoogleJsonResponseException:对 directory.users.photos.update 的 API 调用失败并出现错误:输入无效:photoData 设置用户个人资料图片时

问题描述

我正在尝试创建一个附加到电子表格的谷歌应用脚​​本,该电子表格可以设置谷歌用户的个人资料图片。根据文档,这应该有效:

var response = UrlFetchApp.fetch(url);
var photoBlob = response.getBlob();
var data = Utilities.base64EncodeWebSafe(photoBlob.getBytes());
AdminDirectory.Users.Photos.update({photoData: data}, this.email);

但是,这会导致异常:

GoogleJsonResponseException: API call to directory.users.photos.update failed with error: Invalid Input: photoData

运行此脚本的用户有权编辑个人资料图片

标签: javascriptgoogle-apps-scriptgoogle-api

解决方案


您的网址一定有问题,以下对我有用:

function myFunction() {
  var url = "https://www.telegraph.co.uk/content/dam/Pets/spark/royal-canin/tabby-kitten-small.jpg"
  var response = UrlFetchApp.fetch(url);
  var photoBlob = response.getBlob();
  var data = Utilities.base64EncodeWebSafe(photoBlob.getBytes());
  var email = Session.getEffectiveUser().getEmail()
  AdminDirectory.Users.Photos.update({photoData: data}, /*this.*/email);
}

或者,您也可以使用驱动器中的图像,如下所示:

function myFunction() {
  var url = "https://www.telegraph.co.uk/content/dam/Pets/spark/royal-canin/tabby-kitten-small.jpg"
  var response = DriveApp.getFileById("1f8EFG6G5zNd6by_fNEecSh2D1My_p-_p")
  var photoBlob = response.getBlob();
  var data = Utilities.base64EncodeWebSafe(photoBlob.getBytes());
  var email = Session.getEffectiveUser().getEmail()
  AdminDirectory.Users.Photos.update({photoData: data}, /*this.*/email);
}

推荐阅读