【发布时间】:2017-10-04 07:49:54
【问题描述】:
我正在尝试在 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。
这里有什么明显的缺失吗?
【问题讨论】:
标签: android amazon-s3 amazon-cognito