代号一上传图片到S3存储桶权限

Posted

技术标签:

【中文标题】代号一上传图片到S3存储桶权限【英文标题】:Codename one upload image to S3 bucket permission 【发布时间】:2017-05-05 11:14:26 【问题描述】:

代号一的 Shai 帮助我将图像上传到 s3 存储桶,我能够上传图像,我碰巧注意到,当我从浏览器访问图像时,我收到拒绝访问错误。

图片在移动应用上加载正常,同一张图片在网络浏览器中引发访问被拒绝错误。

这是我的代码:

   String strImage = Capture.capturePhoto(width, -1);
   String s3Bucket = "https://s3.amazonaws.com/MyBuckt/";
   String fileName = "Images/1234567";
   MultipartRequest rq = new MultipartRequest();
   rq.setUrl(s3Bucket);
   rq.addArgumentNoEncoding("key", fileName);
   rq.addArgument("acl", "public-read-write"); // here I give read-write access
   rq.addData("file", strImage, "image/jpeg");
   NetworkManager.getInstance().addToQueue();

当我启动 S3 浏览器时,我确实看到了该文件,当我单击该文件时,我收到拒绝访问弹出消息。存储桶和文件夹以及子文件夹已获得完全授予权限。

图像由手机摄像头拍摄。

感谢任何帮助。

【问题讨论】:

可能是目录或者bucket本身对谁可以查看有限制? 您好,谢谢您的回复。所有用户都拥有对该文件夹和存储桶的读写权限。通过在 S3 浏览器中选择文件,没有检查权限。我在文件夹中拖放了一个文件,并且确实看到了权限检查。不知道现在该怎么办。任何帮助都感激不尽。谢谢。 【参考方案1】:

经过一番研究,我找到了解决方案。希望它可以帮助某人。 解决方案:

   String strImage = Capture.capturePhoto(width, -1);
   String s3Bucket = "https://s3.amazonaws.com/MyBuckt/";
   String fileName = "Images/1234567";
   MultipartRequest rq = new MultipartRequest();
   rq.setUrl(s3Bucket);
   rq.addArgumentNoEncoding("key", fileName);
   //rq.addArgument("acl", "public-read-write"); // here I give read-write access
   rq.addArgument("acl", "bucket-owner-full-control");
   rq.addData("file", strImage, "image/jpeg");
   NetworkManager.getInstance().addToQueue();

我修改acl访问级别如下

rq.addArgument("acl", "bucket-owner-full-control");

我从阅读中了解到,上传的项目除了删除之外没有任何访问权限。有了这个 acl 访问,现在可以读取文件了。

我从中获取信息的链接: https://***.com/questions/34055084/s3-user-cannot-access-object-in-his-own-s3-bucket-if-created-by-another-user

** 感谢 Shai 的积极响应并尽您所能提供帮助 **

【讨论】:

以上是关于代号一上传图片到S3存储桶权限的主要内容,如果未能解决你的问题,请参考以下文章

从 iOS 应用上传到 Amazon S3

正确上传到 Amazon S3 的权限

上传时出现 Amazon S3 存储桶 MalformedXML 错误

使用预签名 URL 上传到 S3 存储桶会出现 403 禁止错误

使用用户信息从 React Native 上传 Amazon s3 存储桶中的项目

使用 s3 和 django-storages 并上传图片