我在哪里可以找到适用于Android的亚马逊S3图像上传代码的工作样本

时间:2015-07-22 17:22:50

标签: java android amazon-web-services android-studio amazon-s3

过去两天我一直在努力使用亚马逊的Android Android S3 SDK。我能够在没有任何问题的情况下使Java(在Eclipse中)工作;我可以上传图片,下载它们,这没问题。然而,改变到Android的齿轮,我没有运气。目前,使用此选定的代码:

AmazonS3Client s3 = new AmazonS3Client( new BasicAWSCredentials(
        Constants.AWS_ACCESS_KEY, Constants.AWS_SECRET_ACCESS_KEY ) );
        //These are correct, I have already confirmed.

ObjectMetadata metaData = new ObjectMetadata();
metaData.setContentType("jpeg"); //binary data

PutObjectRequest putObjectRequest = new PutObjectRequest(
        Constants.BUCKETNAME, Constants.KEY3, new File(selectedImageUri.getPath())
); 
//selectedImageUri is correct as well, 
//(file:///storage/emulated/0/MyDir/image_1437585138776.jpg) 
putObjectRequest.setMetadata(metaData);

s3.putObject(putObjectRequest); //Errors out here

我遇到了多个错误,其中最常见的是:

AmazonHttpClient﹕ Unable to execute HTTP request: Write error: ssl=0xb8cefc10: I/O error during system call, Connection reset by peer
    javax.net.ssl.SSLException: Write error: ssl=0xb8cefc10: I/O error during system call, Connection reset by peer
            at com.android.org.conscrypt.NativeCrypto.SSL_write(Native Method)

我做了大量的研究,没有找到工作代码的运气。我使用了亚马逊的这个链接:https://aws.amazon.com/articles/SDKs/Android/3002109349624271没有它可以为我工作。他们说顶部已被弃用,但我找不到任何工作代码的链接。如果您按照SDK链接到' android示例代码'文件,他们的github repo(这里:https://github.com/awslabs/aws-sdk-android-samples)包含关于上传文件(即图片)主题的零代码。

有没有人知道我在哪里可以找到一些工作代码,说明如何将愚蠢的图片上传到我的存储桶?!??! (希望我知道为什么在Java / Eclipse中这么简单,在Android / Studio中却不是这样)。

PS:我的api_key位于正确的资源文件夹中,我的凭据对于登录是正确的,图像低于5mb,并且这是在后台(异步)线程上运行,以便不在主线程上。

-Pat

2 个答案:

答案 0 :(得分:1)

您是否经过测试才能看到该文件:///storage/emulated/0/MyDir/image_1437585138776.jpg是一个可用的文件?内容URI是Android通常不会映射到文件,通常与内容解析器一起使用。我会仔细检查它实际上是一个文件路径而不是内容解析器uri路径,这就是它的样子。

如果平移,请仔细检查设备的互联网连接。你能打电话给任何AWS api吗?你是否支持某种防火墙或受保护的wifi?

最后,在Android应用程序中使用嵌入式凭据是不安全的(如果您只是在本地测试,但从不发布带有嵌入式凭据的应用程序,而是使用Amazon Cognito进行身份验证,则可以理解)。对于S3的其他示例,您可以看到入门指南http://docs-aws.amazon.com/mobile/sdkforandroid/developerguide/getting-started-android.html,其中包含一堆S3示例。 GitHub上的S3示例(已于7月22日更新)使用Transfer Utility获得了一个S3上传器示例,以及一个分步教程。

希望有所帮助!

答案 1 :(得分:1)

找出答案,虽然为什么仍然没有找到我。事实证明,问题在于后端的Buckets。我的一个桶被轻微重命名(空白),这阻止了任何上传。我删除并通过存储桶重新创建,然后重新发布它,它似乎工作得很好。

WestonE,你在帖子中提出了一些很好的技巧,确保这不是用本地凭据进行制作是一个非常好的电话。并回答你的问题,是的,令人惊讶的是, file:///storage/emulated/0/MyDir/image_1437585138776.jpg 确实是一个有效的文件。它可能就像HTC手机拥有非常奇怪的存储位置系统一样简单。