You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AdminDirectory获取用户照片返回数字对象,如何编码展示于网页?

问题描述

在Google Apps Script中使用AdminDirectory API获取用户照片时,预期返回Base64编码的照片字符串,但实际得到的是一个数字数组。执行以下代码:

function hentSkolefoto() {
  var photo = AdminDirectory.Users.Photos.get("bend0006@thistedskoler.dk");
  Logger.log(typeof(photo.photoData));
  Logger.log(photo.photoData.toString());
}

日志输出:

object
Logging output too large. Truncating output. [-1.0, -40.0, -1.0, -32.0, 0.0, 16.0,...

调用toString()后日志输出:

Logging output too large. Truncating output. -1,-40,-1,-32,0,16,...
解决方案

这个数字数组是照片原始字节的数值表示(负数对应无符号字节的补码,比如-1等价于255),只需将其转换为Base64格式的Data URL,就能直接在网页上展示。具体实现步骤如下:

  1. 转换为无符号字节数组
    遍历数组,通过num & 0xFF将每个数值转为无符号8位整数,生成标准的Uint8Array。

  2. 生成Blob对象
    使用Utilities.newBlob()把字节数组包装为Blob,指定照片对应的MIME类型(通常为image/jpeg)。

  3. 生成Base64 Data URL
    将Blob的字节内容编码为Base64,拼接成可直接用于<img>标签的Data URL格式。

完整代码示例:

function hentSkolefoto() {
  var photo = AdminDirectory.Users.Photos.get("bend0006@thistedskoler.dk");
  // 处理数字数组,转换为无符号字节
  var byteArray = photo.photoData.map(num => num & 0xFF);
  var uint8Array = new Uint8Array(byteArray);
  
  // 转为Blob,指定MIME类型为jpeg(可根据实际照片类型调整)
  var blob = Utilities.newBlob(uint8Array, "image/jpeg", "user-photo.jpg");
  
  // 生成Base64格式的Data URL
  var base64Data = Utilities.base64Encode(blob.getBytes());
  var dataUrl = "data:image/jpeg;base64," + base64Data;
  
  Logger.log(dataUrl);
  return dataUrl;
}

网页展示方式

如果是通过Google Apps Script Web App部署,可直接在前端页面中引用:

<img src="<?= hentSkolefoto() ?>" alt="用户照片">

也可以通过客户端脚本动态加载:

google.script.run.withSuccessHandler(function(dataUrl) {
  document.getElementById("user-photo").src = dataUrl;
}).hentSkolefoto();

内容的提问来源于stack exchange,提问作者Benno_fra_DK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:05:32