AWS Javascript SDK v3 中的 S3 getSignedUrl v2 等价物
S3 getSignedUrl v2 equivalent in AWS Javascript SDK v3
我刚开始在我的应用程序上使用 aws-sdk 将文件上传到 S3,我正在考虑是使用 aws-sdk v2 还是 v3。
V2 是整个包,考虑到我只需要 s3 服务,而不是无数其他选项,它非常臃肿。但是,文档非常含糊,我很难让等效的 getSignedUrl 函数在 v3 中工作。
在 v2 中,我有这个代码来签署 url,它工作正常。我在服务器上使用 express
import aws from 'aws-sdk';
const signS3URL = (req,res,next) => {
const s3 = new aws.S3({region:'us-east-2'});
const {fileName,fileType} = req.query;
const s3Params = {
Bucket : process.env.S3_BUCKET,
Key : fileName,
ContentType:fileType,
Expires: 60,
};
s3.getSignedUrl('putObject',s3Params,(err,data)=>{
if(err){
next(err);
}
res.json(data);
});
}
现在我一直在阅读文档和示例,试图使 v3 等效于工作,但我找不到任何有关如何使用它的工作示例。这是我到目前为止的设置方式
import {S3Client,PutObjectCommand} from '@aws-sdk/client-s3';
import {getSignedUrl} from '@aws-sdk/s3-request-presigner';
export const signS3URL = async(req,res,next) => {
console.log('Sign')
const {fileName,fileType} = req.query;
const s3Params = {
Bucket : process.env.S3_BUCKET,
Key : fileName,
ContentType:fileType,
Expires: 60,
// ACL: 'public-read'
};
const s3 = new S3Client()
s3.config.region = 'us-east-2'
const command = new PutObjectCommand(s3Params)
console.log(command)
await getSignedUrl(s3,command).then(signature =>{
console.log(signature)
res.json(signature)
}).catch(e=>next(e))
}
此代码中存在一些错误,我首先可以识别的是使用 SDK 提供的 PutObjectCommand
函数创建 command
变量。该文档没有向我阐明我需要将其作为“输入”传递的内容 https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/globals.html#putobjectcommandinput
有使用 aws-sdk v3 经验的人知道怎么做吗?
还有一个附带问题,我在哪里可以找到 v2 的 api 参考资料????因为我找到的只是 sdk 文档,上面写着“v3 现在可用”,我似乎找不到对 v2 的引用....
谢谢你的时间
以下代码将在 JSON 正文中为您提供一个 signedUrl,密钥为 signedUrl
。
const signS3URL = async (req, res, next) => {
const { fileName, fileType } = req.query;
const s3Params = {
Bucket: process.env.S3_BUCKET,
Key: fileName,
ContentType: fileType,
// ACL: 'bucket-owner-full-control'
};
const s3 = new S3Client({ region: 'us-east-2' })
const command = new PutObjectCommand(s3Params);
try {
const signedUrl = await getSignedUrl(s3, command, { expiresIn: 60 });
console.log(signedUrl);
res.json({ signedUrl })
} catch (err) {
console.error(err);
next(err);
}
}
如果您希望拥有 Bucket 的 AWS 账户访问文件,请将 ACL
保留为 bucket-owner-full-control
。
您可以从 here
转到 API Reference
两个 JS SDK 版本
我刚开始在我的应用程序上使用 aws-sdk 将文件上传到 S3,我正在考虑是使用 aws-sdk v2 还是 v3。
V2 是整个包,考虑到我只需要 s3 服务,而不是无数其他选项,它非常臃肿。但是,文档非常含糊,我很难让等效的 getSignedUrl 函数在 v3 中工作。
在 v2 中,我有这个代码来签署 url,它工作正常。我在服务器上使用 express
import aws from 'aws-sdk';
const signS3URL = (req,res,next) => {
const s3 = new aws.S3({region:'us-east-2'});
const {fileName,fileType} = req.query;
const s3Params = {
Bucket : process.env.S3_BUCKET,
Key : fileName,
ContentType:fileType,
Expires: 60,
};
s3.getSignedUrl('putObject',s3Params,(err,data)=>{
if(err){
next(err);
}
res.json(data);
});
}
现在我一直在阅读文档和示例,试图使 v3 等效于工作,但我找不到任何有关如何使用它的工作示例。这是我到目前为止的设置方式
import {S3Client,PutObjectCommand} from '@aws-sdk/client-s3';
import {getSignedUrl} from '@aws-sdk/s3-request-presigner';
export const signS3URL = async(req,res,next) => {
console.log('Sign')
const {fileName,fileType} = req.query;
const s3Params = {
Bucket : process.env.S3_BUCKET,
Key : fileName,
ContentType:fileType,
Expires: 60,
// ACL: 'public-read'
};
const s3 = new S3Client()
s3.config.region = 'us-east-2'
const command = new PutObjectCommand(s3Params)
console.log(command)
await getSignedUrl(s3,command).then(signature =>{
console.log(signature)
res.json(signature)
}).catch(e=>next(e))
}
此代码中存在一些错误,我首先可以识别的是使用 SDK 提供的 PutObjectCommand
函数创建 command
变量。该文档没有向我阐明我需要将其作为“输入”传递的内容 https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/globals.html#putobjectcommandinput
有使用 aws-sdk v3 经验的人知道怎么做吗?
还有一个附带问题,我在哪里可以找到 v2 的 api 参考资料????因为我找到的只是 sdk 文档,上面写着“v3 现在可用”,我似乎找不到对 v2 的引用....
谢谢你的时间
以下代码将在 JSON 正文中为您提供一个 signedUrl,密钥为 signedUrl
。
const signS3URL = async (req, res, next) => {
const { fileName, fileType } = req.query;
const s3Params = {
Bucket: process.env.S3_BUCKET,
Key: fileName,
ContentType: fileType,
// ACL: 'bucket-owner-full-control'
};
const s3 = new S3Client({ region: 'us-east-2' })
const command = new PutObjectCommand(s3Params);
try {
const signedUrl = await getSignedUrl(s3, command, { expiresIn: 60 });
console.log(signedUrl);
res.json({ signedUrl })
} catch (err) {
console.error(err);
next(err);
}
}
如果您希望拥有 Bucket 的 AWS 账户访问文件,请将 ACL
保留为 bucket-owner-full-control
。
您可以从 here
转到API Reference
两个 JS SDK 版本