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

咨询:在Google Apps Script中如何处理API返回的二进制数据

在Google Apps Script中处理API返回的二进制数据

你的当前代码尝试将二进制数据转为文本并解析为JSON,这会导致数据损坏——二进制内容(如示例中的zip压缩包)无法直接按文本格式处理。Google Apps Script提供了专门的内置方法来处理这类数据,具体操作如下:

1. 获取原始二进制数据

放弃使用getContentText(),改用HTTPResponse对象的getContent()方法,它会返回字节数组(Byte Array),这是处理二进制数据的正确形式:

let response = UrlFetchApp.fetch(url, fetchOptions);
let binaryData = response.getContent(); // 获取原始二进制字节数组

2. 保存二进制文件到Google Drive

如果API返回的是zip压缩包,可直接将字节数组保存为Drive文件:

// 从响应头提取文件名(可选)
let contentDisposition = response.getHeaders()['Content-Disposition'];
let filename = contentDisposition.match(/filename=(.*)/)[1];

// 创建Drive文件
DriveApp.createFile(filename, binaryData, MimeType.ZIP);

3. (可选)解压并处理内部文件

若需要进一步处理zip内的CSV文件,可使用Utilities.unzip()方法解压字节数组:

let unzippedFiles = Utilities.unzip(binaryData);
// unzippedFiles是Blob数组,每个元素对应zip内的一个文件

// 提取第一个CSV文件并转为文本
let csvBlob = unzippedFiles[0];
let csvText = csvBlob.getDataAsString();
// 解析CSV内容为二维数组
let csvData = Utilities.parseCsv(csvText);

完整示例代码

function fetchAndProcessBinaryReport() {
  const url = "你的API请求地址";
  const fetchOptions = {
    // 配置请求参数(如授权头、请求方法等)
    headers: {
      "Authorization": "Bearer 你的访问令牌"
    }
  };

  try {
    let response = UrlFetchApp.fetch(url, fetchOptions);
    let binaryData = response.getContent();

    // 提取响应中的文件名
    let contentDisposition = response.getHeaders()['Content-Disposition'];
    let filename = contentDisposition.match(/filename=(.*)/)[1];

    // 将zip文件保存到Google Drive
    DriveApp.createFile(filename, binaryData, MimeType.ZIP);

    // 解压并将CSV内容写入Google Sheets
    let unzippedFiles = Utilities.unzip(binaryData);
    if (unzippedFiles.length > 0) {
      let csvText = unzippedFiles[0].getDataAsString();
      let csvData = Utilities.parseCsv(csvText);
      let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
    }

    console.log("处理完成");
  } catch (error) {
    console.error("请求或处理失败:", error);
  }
}

内容的提问来源于stack exchange,提问作者Max S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:17:43