Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将许多图像从浏览器上载到S3_Node.js_Angular_Amazon Web Services_Amazon S3 - Fatal编程技术网

Node.js 将许多图像从浏览器上载到S3

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配

我需要上传约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>