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

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

我正在尝试按照下面的线程将图像上传到我的 codenameone 项目中的 s3 存储桶,

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

但无法这样做。获取连接错误代码 301 和 java.lang.NullPointerException ...

为了确保我的 s3 存储桶配置正确,我已使用 Postman 应用程序和 Javascript sdk 成功上传了图像。

我想了解上面的示例是否需要任何其他凭证信息,例如 AccessKey、SecretKey 和 AWS 区域?如果是这样,请指导。

非常感谢您的帮助。

谢谢

下面是我的代码。

尝试{

        String strImage = Capture.capturePhoto(300, -1);             
        String s3Bucket = "https://s3.amazonaws.com/mybucketname/";
        String fileName = "testimg1.jpg";
        
        MultipartRequest request = new MultipartRequest();
        request.setUrl(s3Bucket);            
        request.addRequestHeader("Content-Type", "image/jpeg");
        request.addArgumentNoEncoding("key", fileName);            
        request.addArgument("acl", "bucket-owner-full-control");
        request.addData("file", strImage, "image/jpeg");            
        NetworkManager.getInstance().addToQueueAndWait(request);
                 
        int http_code = request.getResponseCode();
        
        Dialog.show("Ok", String.valueOf( http_code) , "Ok", null);      
        
    } catch (Exception ex) {
        
        String err = ex.toString();
        Dialog.show("Err", err, "Ok", null);
    }

Netbeans 控制台显示以下错误。

java.lang.NullPointerException 在 com.codename1.io.ConnectionRequest.performOperationComplete(ConnectionRequest.java:935) 在 com.codename1.io.NetworkManager$NetworkThread.runCurrentRequest(NetworkManager.java:314) 在 com.codename1.io.NetworkManager$NetworkThread.run(NetworkManager.java:390) 在com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) [网络线程] 0:0:6,656 - 异常:java.io.IOException - 流已关闭 java.io.IOException:流已关闭 在 com.codename1.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:140) 在 com.codename1.io.BufferedInputStream.read1(BufferedInputStream.java:338) 在 com.codename1.io.BufferedInputStream.read(BufferedInputStream.java:445) 在 com.codename1.io.BufferedInputStream.read(BufferedInputStream.java:668) 在 com.codename1.io.Util.copyNoClose(Util.java:149) 在 com.codename1.io.Util.copyNoClose(Util.java:135) 在 com.codename1.io.Util.copy(Util.java:170) 在 com.codename1.io.Util.copy(Util.java:124) 在 com.codename1.io.Util.readInputStream(Util.java:303) 在 com.codename1.io.ConnectionRequest.readResponse(ConnectionRequest.java:1543) 在 com.codename1.io.ConnectionRequest.performOperationComplete(ConnectionRequest.java:1003) 在 com.codename1.io.NetworkManager$NetworkThread.runCurrentRequest(NetworkManager.java:314) 在 com.codename1.io.NetworkManager$NetworkThread.run(NetworkManager.java:390) 在 com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

amazon-web-services image amazon-s3 upload codenameone
1个回答
0
投票

我不确定您为什么会收到此错误,但我可以编写与您所拥有的curl命令类似的代码。我还没有尝试过这个,所以你可能需要稍微调整一下。

作为参考,这是curl 语句:

curl --location --request PUT 'https ://my-bucket.s3.amazonaws.com/test1.jpg' \ --header 'Content-Type: image/jpeg' \ --header 'X-Amz-Content-Sha256: xxxxxx' \ --header 'X-Amz-Date: 20231006T041844Z' \ --header 'Authorization: AWS4-HMAC-SHA256 Credential=xxx/20231006/ap-xx-1/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-content-sha256;x-amz-date, Signature=xxxxx' \ --data '@/C:/Temp/TempImg.jpg' 

这应该是等效的代号一代码:

Response<String> result = Rest.put("https ://my-bucket.s3.amazonaws.com/test1.jpg")
   .contentType("image/jpeg")
   .header("X-Amz-Content-Sha256", "xxxxxx")
   .header("X-Amz-Date", "20231006T041844Z")
   .header("Authorization", "AWS4-HMAC-SHA256 Credential=xxx/20231006/ap-xx-1/s3/aws4_request,SignedHeaders=content-length;content-type;host;x-amz-content-sha256;x-amz-date, Signature=xxxxx")
   .body(new Data.ByteData(contentOfFile)).getAsString();
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.