Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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
Amazon web services 无法在S3中的匿名对象上设置任何ACL_Amazon Web Services_Amazon S3_Acl - Fatal编程技术网

Amazon web services 无法在S3中的匿名对象上设置任何ACL

Amazon web services 无法在S3中的匿名对象上设置任何ACL,amazon-web-services,amazon-s3,acl,Amazon Web Services,Amazon S3,Acl,我有一个根AWS帐户拥有的S3存储桶 bucket的一个子目录uploads向世界开放,即(在bucket级别): 当我以匿名用户身份上传文件时(不提供任何AWS凭据),我确实可以写入uploads目录。但是,IAM用户和父(根)用户都无法对上载的文件应用任何修改,例如重命名或移动,并且无论使用何种界面、AWS控制台或API,都会出现问题 使用POST和参数上载匿名对象 'acl':'bucket owner full control'或者'acl':'public read write' AC

我有一个根AWS帐户拥有的S3存储桶

bucket的一个子目录
uploads
向世界开放,即(在bucket级别):

当我以匿名用户身份上传文件时(不提供任何AWS凭据),我确实可以写入
uploads
目录。但是,IAM用户和父(根)用户都无法对上载的文件应用任何修改,例如重命名或移动,并且无论使用何种界面、AWS控制台或API,都会出现问题

使用
POST
和参数上载匿名对象

'acl':'bucket owner full control'
或者
'acl':'public read write'

ACL策略(即使在上载参数中明确提及)是否可能对没有所有者的对象(由匿名者上载)没有影响?如果是这样,有没有办法在上传或追溯时更改文件的所有权

上传文件时为什么不考虑ACL策略?

为什么我不能重命名或移动上传的文件?


补充资料 POST请求由名为的cordova插件发出,该插件默认使用
POST
,但如果需要,可以使用
PUT
。以下是执行上载的代码:

        var upload_options = {
            headers: {
                'Content-Length': 4900000,
                'Connection': 'close',
                'acl': 'bucket-owner-full-control'
            },
            params: {
                'key': 'uploads/' + fileName,
                'Content-Type': 'image/jpeg'
            }
        };
        var s3 = new FileTransfer();
        s3.upload(imageURI, encodeURI("https://<my-bucket>.s3-eu-west-1.amazonaws.com/"), upload_success, upload_fail, upload_options);
var上传\u选项={
标题:{
“内容长度”:4900000,
“连接”:“关闭”,
“acl”:“存储桶所有者完全控制”
},
参数:{
“key”:“uploads/”+文件名,
“内容类型”:“图像/jpeg”
}
};
var s3=新文件传输();
s3.上传(imageURI,encodeURI(“https://.s3-eu-west-1.amazonaws.com/)、上载成功、上载失败、上载选项);

修改策略声明以添加
“条件”:{“StringEquals”:{“s3:x-amz-acl”:[“bucket owner full control”]}
您可能会得到答案——您的上载可能会导致acl未设置,这将只允许在设置的地方上传。我刚刚尝试了应用条件,这导致上传被拒绝(AccessDenied)。这意味着POST请求在某种程度上构建得很糟糕。等等,
POST
?显示正在进行上传的代码。@Michael sqlbot我刚刚更新了问题。您认为将
PUT
x-amz-acl
一起使用而不是
POST
acl
标题会有帮助吗?同时我也在尝试。只是尝试了强制
PUT
方法并使用
x-amz-acl
头,我得到了
MalformedXML
“您提供的XML格式不正确,或者没有根据我们发布的模式进行验证”。因此,我担心我必须深入研究
FileTransfer
的代码,看看它在引擎盖下做了什么。。。
        var upload_options = {
            headers: {
                'Content-Length': 4900000,
                'Connection': 'close',
                'acl': 'bucket-owner-full-control'
            },
            params: {
                'key': 'uploads/' + fileName,
                'Content-Type': 'image/jpeg'
            }
        };
        var s3 = new FileTransfer();
        s3.upload(imageURI, encodeURI("https://<my-bucket>.s3-eu-west-1.amazonaws.com/"), upload_success, upload_fail, upload_options);