我正在尝试按照下面的线程将图像上传到我的 codenameone 项目中的 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)
我不确定您为什么会收到此错误,但我可以编写与您所拥有的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();