我想在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。
这里有什么突出的缺失吗?
答案 0 :(得分:0)
我看到了这个问题,上传没有完成,没有错误或成功标志。
在我的情况下,这是因为我没有在清单中声明TransferService
。
<service
android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
android:enabled="true"/>
这可以防止上载发生,并且侦听器永远不会收到通知。