node.js - 我无法将文件上传到 AWS S3
问题描述
我正在尝试使用 getSignedUrlPromise () 将文件上传到 AWS S3 以获取访问链接,因为存储桶是完全私有的,我希望它只能通过服务器使用 getSignedUrlPromise () 生成的链接进行访问。
当我尝试对获得的链接进行放置时出现问题,因为我收到以下错误,我还将收到的回复留给您。
响应 {type: 'cors', url: 'https://atlasfitness-progress.s3.amazonaws.com/IMG...a9a56b532bdfe1a139d5a451&X-Amz-SignedHeaders=host', 重定向: false, status: 400, ok: false, ...}正文:ReadableStreamlocked:false[[Prototype]]:ReadableStreambodyUsed:falseheaders:Headers {}ok:falseredirected:falsestatus:400statusText:“错误请求”类型:“cors”url:“https://atlasfitness-progress.s3.amazonaws。 com/IMG_20210202_100322.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAZGHWWSFL5XOWPRXJ%2F20211011%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211011T181242Z-Amz-Expes&X签名=88461e762045c9e34e22c7d011ca7b7649700c9da9a56b532bdfe1a139d5a451&X-Amz-SignedHeaders=host"[[原型]]:响应
下面是在 nodeJS 中配置 aws 的代码:
import AWS from 'aws-sdk';
const bucketName = 'atlasfitness-progress';
const region =process.env.AWS_REGION;
const accessKeyId = process.env.AWS_ACCESS_KEY
const secretAccessKey = process.env.AWS_SECRET_KEY
const URL_EXPIRATION_TIME = 60; // in seconds
const s3 = new AWS.S3({
region,
accessKeyId,
secretAccessKey,
signatureVersion: 'v4'
})
export const generatePreSignedPutUrl = async (fileName, fileType) => {
const params = ({
Bucket: bucketName,
Key: fileName,
Expires: 60
})
const url = await s3.getSignedUrlPromise('putObject', params);
return url;
}
然后我有一个快速控制器在请求时发送链接:
routerProgress.post('/prepare_s3', verifyJWT, async (req, res) => {
res.send({url: await generatePreSignedPutUrl(req.body.fileName, req.body.fileType)});
})
export { routerProgress };
但是问题出现在前端,这里的函数首先要求链接,然后尝试将文件上传到 S3。
const upload = async (e) => {
e.preventDefault();
await JWT.checkJWT();
const requestObject = {
fileName: frontPhoto.name,
fileType: frontPhoto.type,
token: JWT.getToken()
};
const url = (await axiosReq.post(`${serverPath}/prepare_s3`, requestObject)).data.url;
//Following function is the one that doesn't work
const response = await fetch(url, {
method: "PUT",
headers: {
"Content-Type": "multipart/form-data"
},
body: frontPhoto
});
console.log(response);
}
一切都完成了,我可以说我是 AWS 的新手,所以很可能我在没有意识到的情况下造成了相当严重的错误。因此,如果有人检测到错误或知道我如何使它工作,我将非常感谢您的帮助。
解决方案
推荐阅读
- javascript - 单击按钮时向地图添加标记?
- javascript - 如何将数组对象中的值设置为 ReactJS 中的动态行?
- javascript - 根据对象的值删除对象
- javascript - 如何防止 Ctrl + c 杀死我的节点进程?
- google-data-studio - 无法在 Google Data Studio CASE 中连接
- php - CONNECT后来自代理的PHP cURL代码502,但它适用于其他网站
- c++ - 迪杰斯特拉计划
- python - 稀疏矩阵行和列表之间的逐元素布尔运算
- authentication - 如何在 Blazor WebAssembly 中实现 OIDC 身份验证?
- go - 我是golang的新手,我正在尝试创建一个zip,其中必须有一个文件夹:tosend.zip/archivos/file.png