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

从Google Script传Blob图像到AWS Textract报InvalidParameterType错误求助

报错触发原因

  1. Google Apps Script端序列化错误:Blob是二进制对象,无法直接通过JSON.stringify()序列化,你当前代码直接把Blob塞进JSON后,实际传输的doc字段是Blob对象调用toString()的默认结果[object Blob],完全没有包含图片的二进制内容。
  2. Lambda端类型不匹配:你拿到序列化后的无效字符串后,没有转成Textract要求的Buffer类型就直接传入Bytes字段,触发类型校验失败。
  3. 额外注意:你当前用了async类型的Lambda handler,但没有等待Textract的异步调用完成,函数会提前退出,即使解决类型问题也拿不到执行结果,同时代码里的JSON.stringfy存在拼写错误,正确写法是JSON.stringify。

doc变量格式验证方法

  • 打印基础信息:在Lambda中加入日志console.log(typeof doc, doc.slice(0, 100)),如果输出为string且前100位是标准base64字符(仅包含大小写字母、数字、+、/、=),说明传输正常;如果输出内容包含[object Blob,就是序列化失败。
  • 校验Buffer有效性:把doc转成Buffer后执行console.log(Buffer.isBuffer(docBuffer), docBuffer.length),如果返回true且Buffer大小和你Drive里的原JPEG文件大小一致,说明格式符合Textract要求。
  • 完整性校验:可以把Lambda收到的doc字符串复制到本地,通过base64解码生成图片文件,能正常打开就说明数据传输没有损坏。

修复后的代码

Google Apps Script端

function googleFunction(id) {
  let file = DriveApp.getFileById(id);
  console.log("File is a " + file.getMimeType());
  let blob = file.getBlob();
  // 将Blob转成base64编码字符串后再序列化
  let blobBytes = blob.getBytes();
  let blobBase64 = Utilities.base64Encode(blobBytes);

  let params = {
    doc: blobBase64,
  };

  var options = {
    method: "PUT",
    "Content-Type": "application/json",
    payload: JSON.stringify(params),
  };

  let response = UrlFetchApp.fetch("https://api-path/prod/resolver", options);
}

Lambda端

"use strict";

const AWS = require("aws-sdk");

exports.handler = async (event) => {
  try {
    let params = JSON.parse(event.body);
    console.log("Parse as document...");
    let textract = new AWS.Textract();
    let doc = params["doc"];
    // 将base64字符串转成Buffer
    let docBuffer = Buffer.from(doc, 'base64');
    let config = {
      Document: {
        Bytes: docBuffer,
        FeatureTypes: ["TABLES"],
      }
    };
    // 用await等待异步调用完成,避免函数提前退出
    const data = await textract.analyzeDocument(config).promise();
    console.log("data:" + JSON.stringify(data));
    return {
      statusCode: 200,
      body: JSON.stringify(data)
    };
  } catch (err) {
    console.log(err, err.stack);
    return {
      statusCode: 500,
      body: JSON.stringify(err.message)
    };
  }
};

额外说明

如果你的图片大小超过5MB,不建议直接通过接口传输二进制,还是用你之前验证过的S3中转方案更稳定,Textract直接读取S3对象的大小限制更高(JPEG/PNG支持到10MB,PDF支持到500页)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:15:03