Joe*_*ger 25 amazon-s3 amazon-web-services aws-sdk-js
我正在搜索文档,它只提供了 v3 凭证的伪代码(例如const client = new S3Client(clientParams)
如何使用存储桶和凭据初始化 S3Client 以执行 getSignedUrl 请求?任何为我指明正确方向的资源都会非常有帮助。我什至搜索了 YouTube、SO 等,但找不到有关 v3 的任何具体信息。即使文档和示例也没有提供使用凭据的实际代码。谢谢!
顺便说一句,我是否必须在文件名中包含假文件夹结构,或者我可以只使用实际的文件名吗?例如:bucket/folder1/folder2/uniqueFilename.zip 或 uniqueFilename.zip
这是我到目前为止的代码:(请记住,我正在返回以wasabiObjKey确保我获得正确的文件名。我是。我遇到问题的是客户端、GetObjectCommand 和 getSignedUrl。
exports.getPresignedUrl = functions.https.onCall(async (data, ctx) => {
const wasabiObjKey = `${data.bucket_prefix ? `${data.bucket_prefix}/` : ''}${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: functions.config().s3_bucket.name,
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")
const url = getSignedUrl(s3, command, { expiresIn: 60 })
return wasabiObjKey
})
Run Code Online (Sandbox Code Playgroud)
qkh*_*pro 46
有一个凭证链可以为来自 SDK https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-node.html的 API 调用提供凭证
从 Amazon EC2 的 AWS Identity and Access Management (IAM) 角色加载
从共享凭证文件 (~/.aws/credentials) 加载
从环境变量加载
从磁盘上的 JSON 文件加载
JavaScript SDK 提供的其他凭据提供程序类
您可以将凭据嵌入到源代码中,但这不是首选方式
new S3Client(configuration: S3ClientConfig): S3Client
Run Code Online (Sandbox Code Playgroud)
其中 S3ClientConfig 包含一个credentials属性
https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/modules/credentials.html
new S3Client(configuration: S3ClientConfig): S3Client
Run Code Online (Sandbox Code Playgroud)
答案示例
'$metadata': {
httpStatusCode: 200,
requestId: undefined,
extendedRequestId: '7kwrFkEp3lEnLU+OtxjrgdmS6gQmvPdbnqqR7I8P/rdFrUPBkdKYPYykWivuHPXCF1IHgjCIbe8=',
cfId: undefined,
attempts: 1,
totalRetryDelay: 0
},
Run Code Online (Sandbox Code Playgroud)
这是我(在 Deno 中)用于测试的一个简单方法(如果您不想采用signedUrl 方法,而只是让 SDK 为您完成繁重的工作):
import { config as env } from 'https://deno.land/x/dotenv/mod.ts' // https://github.com/pietvanzoen/deno-dotenv
import { S3Client, ListObjectsV2Command } from 'https://cdn.skypack.dev/@aws-sdk/client-s3' // https://github.com/aws/aws-sdk-js-v3
const {AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY} = env()
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/modules/credentials.html
const credentials = {
accessKeyId: AWS_ACCESS_KEY_ID,
secretAccessKey: AWS_SECRET_ACCESS_KEY,
}
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/interfaces/s3clientconfig.html
const config = {
region: 'ap-southeast-1',
credentials,
}
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/classes/s3client.html
const client = new S3Client(config)
export async function list() {
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/interfaces/listobjectsv2commandinput.html
const input = {
Bucket: 'BucketNameHere'
}
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/classes/command.html
const cmd = new ListObjectsV2Command(input)
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/classes/listobjectsv2command.html
return await client.send(cmd)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38882 次 |
| 最近记录: |