我正在使用React web应用程序,并试图上传一个文件到AWS S3。< br >我在本地(< code>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'
我已设置权限 -
[
{
"AllowedHeaders": [
"*",
"Content-*"
],
"AllowedMethods": [
"HEAD",
"GET",
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": [
"*"
]
}
]
我还验证了代码中的桶名。
我试过:
我已经尝试了所有方法,并浏览了数十篇文章(1,2)并浏览了此处的问题 - 但它仍然不起作用。不是本地的,也不是在生产中。
确保文件名与<code>键
const bucketParms = {
Bucket: "sample-temp-bucket",
Key: "HeadShot.jpg",
Expires: 3600,
};
s3.getSignedUrl("putObject", bucketParms, (error, url) => {
if (error) console.log("error", error);
if (url) console.log("url", url);
});
在这里,我们可以测试从邮递员或卷曲生成的url
然后我们可以进行一个httpPUT
调用。
this.http
.put(
"https://sample-temp-bucket.s3.amazonaws.com/HeadShot.jpg?X-Amz-Algorithm=AWS4-HMAC....",
formData
)
.subscribe((response) => {
console.log("response received is ", response);
});
而CORS,ExposeHeaders
的通配符不接受(至少从控制台),它只使用空数组“exposehaeders”:[]
在没完没了地研究了几个小时后,我发现了这个问题
CORS错误的原因是我没有在初始AWS.config中包含
配置设置。区域
。更新
一旦我添加了< code>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,这确实令人困惑和误导。
tl;dr-从浏览器向从服务器(AWS S3)获取的预签名url发出的请求获得,但以下请求获得 这是我负责AWS及其S3服务的服务器端代码: 知道我做错了什么吗?
我正在尝试使用预先签名的URL将文件上传到Amazon的S3。我从生成URL的服务器获取URL https://com-example-mysite.s3-us-east-1.amazonaws.com/userFolder/ImageName?X-Amz安全令牌=xxfoox///xxbarxx= 不幸的是,当我将其传递给Refught2时,它会修改试图将其转换为URL的字符串。我设置了,它解决
我正在开发一个特性,使用Angular/预签名url和API Gateway/lambda生成预签名url将文件上传到S3。 我的工作流描述如下: 从模板中获取选定文件 请求我的api(网关/lambda)使用文件名生成预签名的URL。 const body={filename:this.selectedfile.name}const preSignedUrl=await this.http.po
这里是我的node.js预签名URL的生成 那么我在URL生成或卷曲方面的问题在哪里呢?谢谢
问题内容: 我正在尝试使用预签名的URL将文件上传到Amazon的S3。我从生成URL的服务器获取URL,并将其作为JSON对象的一部分发送给我。我将URL作为字符串获取,如下所示: https://com-example-mysite.s3-us- east-1.amazonaws.com/userFolder/ImageName?X-Amz-Security- Token=xxfooxx%2F
我正试图上传一个媒体文件(图片,任何扩展名jpg/png/jpeg或视频)到aws s3桶,从邮递员我创建了我的预签名url在我的后端如下 这成功地生成了一个url,但我似乎无法使用postman来测试它,这是我如何在postman中调整请求的截图 我所尝试的: 在上面的代码中,我尝试将签名版本v4添加到params中,但它给了我一个错误,说出了意外的关键字。我甚至尝试将其添加到aws配置和s3中