gpt4 book ai didi

node.js - 使用 busboy 库在 Lambda 中上传文件时缺少数据?

转载 作者:行者123 更新时间:2023-12-04 17:38:13 25 4
gpt4 key购买 nike

我正在尝试在 lambda 函数中使用 busboy 来处理应该上传图像文件的发布请求。我注意到整个文件内容没有被 busboy 解析。

我尝试将对 busboy.write 的调用更改为仅使用“base64”,因为看起来文件以二进制形式到达,但这也不起作用。

我的客户端代码

const formData = new FormData();
formData.append("file", params.file, params.file.name);

const request = new XMLHttpRequest();
request.open("POST", "https://myapi/uploadphoto");
request.setRequestHeader('Authorization', this.props.idToken);
request.send(formData);

我的 lambda 代码

function getFile(event) {
const busboy = new Busboy({headers: event.headers});
const result = {};

return new Promise((resolve, reject) => {
busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
file.on('data', data => {
result.content = data;
console.log("got data... " + data.length + ' bytes');
});

file.on('end', () => {
result.filename = filename;
result.contentType = mimetype;
resolve(result);
});
});

busboy.on('error', error => reject(error));
busboy.write(event.body, event.isBase64Encoded ? 'base64' : 'binary');
busboy.end();
});
}

尝试使用示例照片时,我注意到“获取数据”控制台日志显示我没有收到整个文件。我使用的文件是 229707 字节,但控制台日志显示它收到了 217351 字节。

我想知道我是否使用了 busboy 错误,或者这是 lambda + api 网关的一些怪癖。非常感谢任何想法或帮助解决问题。

最佳答案

我也曾为这个问题苦苦挣扎,但最终还是 API Gateway 的问题。

我能够通过在 API 网关 的设置中添加 multipart/form-data 作为二进制媒体类型来解决问题。

要执行此操作,请转到 API 网关>“您的 API”> 设置 > 添加二进制媒体类型并添加 multipart/form-data

之后,再次部署您的API,它应该可以工作了。

希望对大家有帮助!

关于node.js - 使用 busboy 库在 Lambda 中上传文件时缺少数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55671047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com