在android上上传到s3存储桶时出错

时间:2017-05-05 18:25:36

标签: android amazon-s3 amazon-cognito

我想在android上上传到S3。但是,它实际上并不上传图像。我看到的唯一类似错误的是:

D / CognitoCachingCredentialsProvider:在SharedPreferences中找不到有效凭据

然而,当谷歌搜索它时,我发现各种相互矛盾的信息。我能找到的唯一真实的事情是,这可能是因为没有正确地将cognito框架添加到项目中,但我已经验证它是在build.gradle中。

我还应该注意到,我在iOS上使用相同的凭据就可以了。有人提到我需要为每个平台使用不同的身份池。所以我为Android创建了一个新的身份池,并确保我有匹配的权限,但它也没有用。考虑到iOS如何正常工作并上传图像没有问题,我觉得必须使用Android上的代码。我把它包含在下面。

此功能可以从cognito获取凭据

    private CognitoCachingCredentialsProvider getCreadentials(Context context) {
    CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
                    context.getApplicationContext(),
                    IDENTITY_POOL_ID,
                    Regions.US_EAST_1
            );

    return credentialsProvider;
}

然后实际将图像保存到S3的功能

    public void saveImage(Context context, Bitmap data, String key, Double lat, Double lon) {

    exifBuilder = new ExifBuilder(mContext, lat, lon);

    File file = writeImageToFile(context, data);
    s3 = new AmazonS3Client(getCreadentials(context));

    if (file != null) {

        TransferUtility transferUtility = new TransferUtility(s3, context.getApplicationContext());
        TransferObserver observer = transferUtility.upload(
                BUCKET_NAME,
                key,
                file
        );
    }
}

我已验证该文件不为空。并且还验证了它是正确的标识池ID。

这里有什么突出的缺失吗?

1 个答案:

答案 0 :(得分:0)

我看到了这个问题,上传没有完成,没有错误或成功标志。

在我的情况下,这是因为我没有在清单中声明TransferService

    <service
        android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
        android:enabled="true"/>

这可以防止上载发生,并且侦听器永远不会收到通知。