从Google Script传Blob图像到AWS Textract报InvalidParameterType错误求助
报错触发原因
- Google Apps Script端序列化错误:Blob是二进制对象,无法直接通过
JSON.stringify()序列化,你当前代码直接把Blob塞进JSON后,实际传输的doc字段是Blob对象调用toString()的默认结果[object Blob],完全没有包含图片的二进制内容。 - Lambda端类型不匹配:你拿到序列化后的无效字符串后,没有转成Textract要求的Buffer类型就直接传入
Bytes字段,触发类型校验失败。 - 额外注意:你当前用了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
相关产品推荐
相关产品推荐

