amazon-web-services - 由于 CORS,使用 createPresignedPost 或 getPresignedUrl 将 formData 文件从客户端上传到 S3 失败
问题描述
我正在使用 React Web 应用程序并尝试将文件上传到 AWS S3。
我已经在本地(localhost:3000
)和部署到生产环境(Vercel 无服务器功能)时尝试了所有方法。
我首先使用 fetch 来检索文件上传的预签名 url,效果很好:
module.exports = async (req, res) => {
let {fileName, fileType} = req.body;
const post = await s3.createPresignedPost({
Bucket: BUCKET_NAME,
Fields: {
key: fileName
},
ContentType: fileType,
Expires: 60
});
res.status(200).json(post);
然后,在第二次获取中:
await fetch(url, {method: 'POST', body: formData}
我越来越:
fetch has been blocked by CORS policy: No 'Access-Control-Allow-Origin'
我已在存储桶配置中正确设置了 Permissions -> CORS json:
[
{
"AllowedHeaders": [
"*",
"Content-*"
],
"AllowedMethods": [
"HEAD",
"GET",
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": [
"*"
]
}
]
我还在我的代码中验证了存储桶名称。
我试过了:
解决方案
经过无数小时的研究,我发现了这个问题。
CORS 错误的原因是我没有region
在初始AWS.config.update
配置设置中包含 。
一旦我添加了region
密钥,CORS 错误就解决了:
const AWS = require('aws-sdk');
AWS.config.update({
accessKeyId: 'XXXXX',
secretAccessKey: 'XXXXXX',
region: 'us-west-2', // Must be the same as your bucket
});
const s3Client = new AWS.S3();
未配置存储桶区域返回的错误是 CORS,这确实令人困惑和误导。
推荐阅读
- sql - PLS-00103 遇到符号“END”
- javascript - 我正在尝试通过添加和删除我已经设置样式但它不起作用的活动类来创建切换按钮
- python - 使用日期时间列 Pandas 将 CSV 文件读取到 MySQL
- javascript - 如何在我的 Reactjs 计算器应用程序上显示计算器输出
- python - 如何将powershell脚本的输出传递给pythonscript
- bash - 在 bash 中,创建 key=filename 和 value=file-contents 的 json 对象,给定 stdin 上的路径文件名序列
- reactjs - 使用与 typescript 反应的复制到剪贴板方法的 Jest 测试
- python-3.x - 当任务被取消时,Asyncio 会阻塞主事件循环
- r - 无法在 r 中旋转 ggplot2 构面图中的 x 轴标签
- python - python除法输出值0.0000000002远离正确值