Node.js 将许多图像从浏览器上载到S3
我需要上传约500张jpeg图像到S3,每张图像大小约为8MB。需求从浏览器上传,GUI应该反映每个图像的状态。我们用户的平均上传速度是1MB。 我的方法是向服务器(节点)请求一个预签名URL数组,然后使用http put从浏览器上载。 当我上传1-3张图片时,一切正常,但是尝试上传超过4张图片会产生随机结果,一些图片被上传,一些抛出CORS错误。对于那些有错误的人来说,当我在postman中使用完全相同的url时,它可以正常工作,所以下面有一个不同的错误 守则: 客户(角度): 铲斗CORS配置:Node.js 将许多图像从浏览器上载到S3,node.js,angular,amazon-web-services,amazon-s3,Node.js,Angular,Amazon Web Services,Amazon S3,我需要上传约500张jpeg图像到S3,每张图像大小约为8MB。需求从浏览器上传,GUI应该反映每个图像的状态。我们用户的平均上传速度是1MB。 我的方法是向服务器(节点)请求一个预签名URL数组,然后使用http put从浏览器上载。 当我上传1-3张图片时,一切正常,但是尝试上传超过4张图片会产生随机结果,一些图片被上传,一些抛出CORS错误。对于那些有错误的人来说,当我在postman中使用完全相同的url时,它可以正常工作,所以下面有一个不同的错误 守则: 客户(角度): 铲斗CORS配
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<ExposeHeader>ETag</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
*
邮递
得到
放
删除
头
埃塔格
*
示例错误:
从源站访问“”处的XMLHttpRequesthttp://localhost:4200'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'标头
PUT net::ERR\u失败
编辑:
也就是说,上传大小为110 KB的32个图像是可以的。既然这相对简单且快速,为什么不尝试将CORS添加到后端,然后看看是否可以修复它?奇怪的是,它不是每次都发生,但不是每个请求都会触发CORS预飞行,所以我假设您的请求之间存在差异。还有,有没有可能为此创建一个应用程序?@David CORS错误发生在客户端直接将其放入S3时,服务器不是它的一部分。我明白了,我认为服务器会这样做。然后,您需要对S3进行一些配置,查看他们对该主题的看法。查看此附加信息,了解如何获取规则。免责声明:我从未使用过S3,所以我只是依靠文档。我编辑了这个问题,以显示bucketYour配置文件的cors策略看起来不错。根据这个问题/答案,可能是权限问题。您是否可以验证您使用的服务器/存储桶是否正确?查看对已接受答案的评论,看看是否是您的情况。
GetAllImagesNamesKeys:(imagesNames,userId) =>{
let allImagesResult = [];
// use map
imagesNames.map((x,i) =>{
const params = {
Bucket: module.exports.GetImageBucket(userId),
Key: module.exports.GenerateImagePresignKey(x,userId),
//Expires: 15 * 60,
ContentType: 'image/jpeg'
};
// then get the presigned url
allImagesResult.push({
image_name: x,
presign_url: s3client.getSignedUrl('putObject', params)
});
});
return allImagesResult;
}
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<ExposeHeader>ETag</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>