从外部源作为 blob 发送到 AWS Textract 的图像文件出现“InvalidParameterType”错误
Posted
技术标签:
【中文标题】从外部源作为 blob 发送到 AWS Textract 的图像文件出现“InvalidParameterType”错误【英文标题】:"InvalidParameterType" error for image files sent as blob to AWS Textract from external source 【发布时间】:2021-12-20 08:47:10 【问题描述】:目前
我正在尝试让 AWS Textract 处理从 Google Scripts 中的函数提供的图像,该函数被发送到解析的 Lambda。我正在关注https://docs.aws.amazon.com/AWSjavascriptSDK/latest/AWS/Textract.html#analyzeDocument-property上的文档
我的 Google 脚本代码:
function googleFunction(id)
let file = DriveApp.getFileById(id);
console.log("File is a " + file.getMimeType());
let blob = file.getBlob();
let params =
doc: blob,
;
var options =
method: "PUT",
"Content-Type": "application/json",
payload: JSON.stringify(params),
;
let response = UrlFetchApp.fetch("https://api-path/prod/resolver", options);
我的 Lambda resolver
代码:
"use strict";
const AWS = require("aws-sdk");
exports.handler = async (event) =>
let params = JSON.parse(event.body);
console.log("Parse as document...");
let textract = new AWS.Textract();
let doc = params["doc"];
let config =
Document:
Bytes: doc,
FeatureTypes: ["TABLES"],
;
textract.analyzeDocument(config, function (err, data)
console.log("analyzing...");
if (err)
console.log(err, err.stack);
// an error occurred
else
console.log("data:" + JSON.stringfy(data));
// successful response
);
;
问题
文件已成功从 Google Scripts 发送到 Lambda,但返回以下错误:
"errorType": "InvalidParameterType",
"errorMessage": "Expected params.Document.Bytes to be a string, Buffer, Stream, Blob, or typed array object"
问题
有没有办法验证doc
变量的格式是什么,以确保它符合 AWS Textract 的要求?
谁能看到返回错误的可能原因?
注意事项
当同一个文件上传到 S3 bucked 时,Textract 工作正常,并使用以下配置在配置中提供:S3Object: Bucket: 'bucket_name', Name: 'file_name'
我已确认文件为 JPEG
【问题讨论】:
【参考方案1】:通过 2 处更改让它工作:
-
将
getBytes()
添加到 Google 端代码
将 Buffer.from()
添加到 AWS 端代码
我的 Google 脚本代码:
function googleFunction(id)
let file = DriveApp.getFileById(id);
console.log("File is a " + file.getMimeType());
let blob = file.getBlob().getBytes();
let params =
doc: blob,
;
var options =
method: "PUT",
"Content-Type": "application/json",
payload: JSON.stringify(params),
;
let response = UrlFetchApp.fetch("https://api-path/prod/resolver", options);
我的 Lambda resolver
代码:
"use strict";
const AWS = require("aws-sdk");
exports.handler = async (event) =>
let params = JSON.parse(event.body);
console.log("Parse as document...");
let textract = new AWS.Textract();
let doc = params["doc"];
let config =
Document:
Bytes: Buffer.from(doc),
FeatureTypes: ["TABLES"],
;
textract.analyzeDocument(config, function (err, data)
console.log("analyzing...");
if (err)
console.log(err, err.stack);
// an error occurred
else
console.log("data:" + JSON.stringfy(data));
// successful response
);
;
【讨论】:
以上是关于从外部源作为 blob 发送到 AWS Textract 的图像文件出现“InvalidParameterType”错误的主要内容,如果未能解决你的问题,请参考以下文章
我是流的新手,我需要从 ftp 下载文件并作为流发送到 azure stageblock(npm @azure/storage-blob)
从 AWS Glue 表到 RedShift Spectrum 外部表的日期字段转换
使用 azure 逻辑应用将 blob 从 azure 存储帐户动态发送到电子邮件