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

问题描述 投票:0回答:2

来自代号一的 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 浏览器时,我确实看到了该文件,当我单击该文件时,我收到“访问被拒绝”弹出消息。存储桶和文件夹以及子文件夹已被授予完全授予权限。

  • 图像是由手机摄像头拍摄的。

如有任何帮助,我们将不胜感激。

amazon-s3 codenameone
2个回答
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://stackoverflow.com/questions/34055084/s3-user-cannot-access-object-in-his-own-s3-bucket-if-created-by-another-user

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


0
投票

上面的代码不起作用。它返回 301 错误。 你能帮忙吗?

        String strImage = Capture.capturePhoto(300, -1);            
        
        String s3Bucket = "https://s3.amazonaws.com/my-bucket/";
        String fileName = "imagename.jpg";
        MultipartRequest request = new MultipartRequest();
        request.setUrl(s3Bucket);
        request.addArgumentNoEncoding("key", fileName);            
        request.addArgument("acl", "bucket-owner-full-control");
        request.addData("file", strImage, "image/jpeg");
        // Init server request
        NetworkManager.getInstance().addToQueueAndWait(request);
                   
        // Check server availability
        int http_code = request.getResponseCode();
                    
        UI.Log("NetService.IsNetworkAvailable", "Response Code: " + http_code );
        if (http_code == 200) {
            return true;
        } else {
            return false;
        }
© www.soinside.com 2019 - 2024. All rights reserved.