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

如何将Web App接收的二进制字符串转为Google Drive可用Blob并上传?

解决Google Apps Script Web App接收Excel文件上传损坏问题

问题原因

Google Apps Script(GAS)中,e.postData.contents返回的是字符串类型。Excel文件属于二进制数据,直接将该字符串转为Blob时,会因字符串编码(默认UTF-8)的特性丢失原始二进制字节,最终导致上传后的文件损坏。而你的Python Flask代码中,request.data直接获取原始字节流,因此能正确处理二进制文件。

修复方案

根据POST请求的二进制数据传输方式,选择以下两种修复代码之一:

情况1:请求发送的是原始二进制流

直接通过e.postData.getBytes()获取原始字节数组,再创建Blob:

function doPost(e) {
  // 获取原始二进制字节数组
  const byteArray = e.postData.getBytes();
  // 创建符合格式的Blob并上传到Drive
  const blob = Utilities.newBlob(byteArray, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'myExcelFile.xlsx');
  DriveApp.createFile(blob);
  return ContentService.createTextOutput("文件上传成功!");
}

情况2:请求发送的是Base64编码的字符串

如果发送方将二进制数据转为Base64字符串后发送,先解码为字节数组再创建Blob:

function doPost(e) {
  // 将Base64字符串解码为字节数组
  const byteArray = Utilities.base64Decode(e.postData.contents);
  const blob = Utilities.newBlob(byteArray, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'myExcelFile.xlsx');
  DriveApp.createFile(blob);
  return ContentService.createTextOutput("文件上传成功!");
}

原理说明

  • GAS中e.postData.contents会把二进制数据按UTF-8编码解析为字符串,这会破坏非UTF-8兼容的二进制字节(比如Excel文件的PK头部分)。
  • 直接使用getBytes()获取原始字节数组,或对Base64编码的字符串解码,能保留完整的二进制数据,确保生成的Blob与原文件一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:35:20