Android 安卓亚马逊S3实用程序
我试图使用以下代码将一个图像上传到amazon(AWS SDK 2.3.0)s3Android 安卓亚马逊S3实用程序,android,amazon-web-services,amazon-s3,amazon,Android,Amazon Web Services,Amazon S3,Amazon,我试图使用以下代码将一个图像上传到amazon(AWS SDK 2.3.0)s3 CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( getApplicationContext(), "XXXXXXX", // Identity Pool ID Re
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(),
"XXXXXXX",
// Identity Pool ID
Regions.EU_WEST_1 // Region
);
AmazonS3Client s3Client = new AmazonS3Client(credentialsProvider);
TransferUtility transferUtility = new TransferUtility(s3Client, this.
getApplicationContext());
TransferObserver observer = transferUtility.upload("testbucketzzzz", "test.jpg",
file);
每次我试图上传一个图像时,我都会遇到以下错误
UploadTask:无法上载:37,因为不支持您提供的授权机制。请使用AWS4-HMAC-SHA256。(服务:Amazon S3;状态代码:400;错误代码:InvalidRequest;请求ID:9787E5373D02BA7)
我认为这只是AWS SDK旧版本的问题。经过无数个小时的努力,我发现了下面的“诀窍”,但这只会导致另一个错误,根本不需要
System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true");
您可以使用以下snipet将图像上载到
Amazon S3
(确保您在main-thread
中未执行此操作):
如果您想了解更多关于为什么您的方法不起作用的信息,您可以参考我认为建议您使用CognitoCachingCredentialsProvider,而不再使用硬核凭证?我知道了问题的原因,我的桶位于法兰克福,我刚刚在爱尔兰用另一个水桶测试了它,它工作得完美无缺,这至少是一个解决方案。
BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(
ACCESS_KEY,
SECRET_KEY
);
AmazonS3Client s3Client = new AmazonS3Client(basicAWSCredentials);
s3Client.setEndpoint(ENDPOINT);
s3Client.setRegion(Region.getRegion(Regions.EU_WEST_1));;
PutObjectRequest por = new PutObjectRequest(
"YOUR_BUCKET_NAME", "YOUR_KEY", file);
}
s3Client.putObject(por);