我正在尝试使用presignedUrl API为Wasabi桶(而不是实际的Amazon )中的对象生成一个S3。我让它生成URL,但出于某种原因,它没有将区域/端点添加到URL中。
所以,代替https://s3.us-central-1.wasabisys.com/bucket/filepath,我得到了https://bucket/filepath
这是我的代码:
exports.getPresignedUrl = functions.https.onCall(async (data, ctx) => {
const wasabiObjKey = `${data.bucket_prefix ? `${data.bucket_prefix}/` : ''}${data.uid.replace(/-/g, '_').toLowerCase()}/${data.uid.replace(/-/g, '_').toLowerCase()}${data.variation ? `_${data.variation.replace(/\./g, '').toLowerCase()}` : ''}.zip`
const { S3Client, GetObjectCommand } = require('@aws-sdk/client-s3')
const s3 = new S3Client({
bucketEndpoint: ee_products_bucket_endpoint,
region: functions.config().s3_bucket.region,
credentials: {
secretAccessKey: functions.config().s3.secret,
accessKeyId: functions.config().s3.access_key
}
})
const command = new GetObjectCommand({
Bucket: functions.config().s3_bucket.name,
Key: wasabiObjKey,
})
const { getSignedUrl } = require("@aws-sdk/s3-request-presigner")
try {
const url = getSignedUrl(s3, command, { expiresIn: 60 })
return url
}
catch(err) {
return `Error: ${err}`
}
})发布于 2021-07-07 01:54:02
我终于找到了解决方案,而且functions.config().s3_bucket.endpoint是在线的,但是我没有将它部署到模拟器中的.runtimeconfig.json中,所以字符串是空的。
要在本地进行测试的env命令:
Windows:
firebase functions:config:get | ac .runtimeconfig.jsonOSX:
firebase functions:config:get > .runtimeconfig.jsonhttps://stackoverflow.com/questions/68265652
复制相似问题