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,就能直接在网页上展示。具体实现步骤如下:
转换为无符号字节数组
遍历数组,通过num & 0xFF将每个数值转为无符号8位整数,生成标准的Uint8Array。生成Blob对象
使用Utilities.newBlob()把字节数组包装为Blob,指定照片对应的MIME类型(通常为image/jpeg)。生成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
相关产品推荐
相关产品推荐

