如何解决如何从Next JS应用程序安全地将图像上传到Amazon S3?
我正在构建NextJS应用程序,我需要授权用户才能将图像上传到Amazon S3存储桶,以用于帖子。
最好的解决方法是什么?我环顾四周,但是只能找到通过express或使用运行在前端的react-s3包进行上传的教程,但是我对在前端代码中存储Amazon s3的敏感数据感到谨慎
我可以在下一个api路由中编写一个lamda函数并从那里发送吗?还是有从字体末尾上载的安全方法。我对BE的经验很少,因此对快递等没有太多经验。但是,任何帮助将不胜感激。
解决方法
所以你必须在 api 文件夹中创建一个具有此功能的文件
import aws from "aws-sdk";
aws.config.update({
accessKeyId: "your id ",secretAccessKey: "your secret ",region: "your bucket region",signatureVersion: 'v4',});
const s3 = new aws.S3();
const post = await s3.createPresignedPost({
Bucket: "your bucket name",Fields: {
key: req.query.file,},Expires: 600,// seconds
ACL:"public-read",Conditions: [
['content-length-range',12048576],],});
如果你调用这个 api,它会给你一个链接 url 和一些数据放在标题中以访问 10 分钟以上传图像,如果你用文件获取这个 url,你将上传到 s3 中的存储桶
const res = await fetch(
`${server}/api/admin/add/addImage?file=${file.name}`
);
const { url,fields } = await res.json();
const formData = new FormData();
Object.entries({ ...fields,file }).forEach(([key,value]) => {
formData.append(key,value);
});
const upload = await fetch(url,{
method: "POST",body: formData,});
setUrlfileUploaded(`${upload.url}/${file.name}`);
if (upload.ok) {
console.log("Uploaded successfully!");
} else {
console.error("Upload failed.");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。