node.js - s3.getObject().promise() 从不返回任何东西
问题描述
如果在符合我在 stackoverflow 和 AWS SDK 文档上阅读的所有内容的 Lambda 中使用此代码。
但是,它既不返回任何内容,也不引发错误。代码只是停留在 s3.getObject(params).promise() 上,因此 lambda 函数会在超时时运行,即使超过 30 秒也是如此。我尝试获取的文件实际上是 25kb。
知道为什么会这样吗?
var AWS = require('aws-sdk');
var s3 = new AWS.S3({httpOptions: {timeout: 3000}});
async function getObject(bucket, objectKey) {
try {
const params = {
Bucket: bucket,
Key: objectKey
}
console.log("Trying to fetch " + objectKey + " from bucket " + bucket)
const data = await s3.getObject(params).promise()
console.log("Done loading image from S3")
return data.Body.toString('utf-8')
} catch (e) {
console.log("error loading from S3")
throw new Error(`Could not retrieve file from S3: ${e.message}`)
}
}
测试功能时,我收到以下超时。
START RequestId:97782eac-019b-4d46-9e1e-3dc36ad87124 版本:$LATEST 2019-03-19T07:51:30.225Z 97782eac-019b-4d46-9e1e-3dc36ad87124 试图从 zarg_PROD_4113 获取 public-images/low/ZARGES_LI.TECHST7 -pimdata-test 2019-03-19T07:51:54.979Z 97782eac-019b-4d46-9e1e-3dc36ad87124 从 S3 加载错误 2019-03-19T07:51:54.981Z 97782eac-019b-4d46-9e1e-3dc36ad871 :"无法从 S3 检索文件:连接在 3000 毫秒后超时","errorType":"Error","stackTrace":["getObject (/var/task/index.js:430:15)","", “process._tickDomainCallback (internal/process/next_tick.js:228:7)”]} END RequestId:97782eac-019b-4d46-9e1e-3dc36ad87124 REPORT RequestId:97782eac-019b-4d46-9e1e-3dc36ad87124 持续时间:24876。90 毫秒计费持续时间:24900 毫秒内存大小:512 MB 使用的最大内存:120 MB
我正在获取的图像实际上是公开的: https ://s3.eu-central-1.amazonaws.com/zarges-pimdata-test/public-images/low/ZARGES_41137_PROD_TECH_ST_LI.jpg
解决方案
const data = (await (s3.getObject(params).promise())).Body.toString('utf-8')
推荐阅读
- php - PDO 在数组中插入数组
- xamarin.forms - 如何在我的 xamarin 表单应用程序中使用 lottie 动画?
- python - 如何避免 2 个相等的循环 | 姜戈
- unity3d - unity 3d 我如何以直线方法计算末端和每个玩家之间的距离,然后按距离对它们进行排序,
- ios - 获取未压缩的 CIImage 数据
- python-docx - 使用 python-docx 是否可以设置用于文档的主题
- c# - 如何将列表和字符串传递给具有通用列表参数的通用方法
- mysql - Laravel 页面在 localhost 工作时在主机上过期 419
- python-3.x - 有没有办法为重命名文件提供多个文件位置?
- php - 来自 get_object_vars 的 PHP 关联数组不适用于整数键