我正在使用iOS应用程序,需要将图像上传到AWS S3Bucket。我从服务器获取了临时证书(accessKey,secretKey,sessionToken和bucketName)以上传图像。
我发现很难找到正确的API来使用此凭据上传图像。
AWS示例程序是使用AWSCognitoCredentialsProvider给出的。
我有可以使用的Android版本代码,可以将图像上传到S3。但是我在iOS SDK中找不到相应的API。
BasicSessionCredentials basiccredentials = new BasicSessionCredentials(
MY_ACCESS_KEY_ID, MY_SECRET_KEY,
MY_SESSION_TOKEN);
AmazonS3Client s3Client = new AmazonS3Client(
basiccredentials);
TransferManager manager = new TransferManager(s3Client);
PutObjectRequest por = new PutObjectRequest(Constants.getPictureBucket(), Constants.PICTURE_NAME,file name);
manager.upload(por);
iOS SDK具有以下CredentialsProvider类
AWSStaticCredentialsProvider 类仅接受 accessKey 和 secretKey 。其他2个类别期望使用不同的参数。
当我使用带有accessKey和secretKey的AWSStaticCredentialsProvider上载图像时,出现以下错误消息
上传失败:[错误域= NSURLErrorDomain代码= -1017“无法解析
响应” UserInfo = 0x7f8773f70ee0 {NSUnderlyingError = 0x7f8773f4bbb0
“该操作无法完成。(kCFErrorDomainCFNetwork错误
-1017。)“,NSErrorFailingURLStringKey = https://s3.amazonaws.com/playfiksprofilepictures/429bfd812ea08e706bab868f3cd8b9c6.jpg,
NSErrorFailingURLKey = https://s3.amazonaws.com/playfiksprofilepictures/429bfd812ea08e706bab868f3cd8b9c6.jpg,
_kCFStreamErrorDomainKey = 4,_kCFStreamErrorCodeKey = -1,NSLocalizedDescription =无法解析响应}]
不清楚此错误消息是凭据提供程序还是其他问题
非常感谢您提供任何帮助来解决此问题
谢谢
编辑
我使用了@ user3467204提供的示例程序
这是带有错误消息的输出(您提供的AWS Access Key ID在我们的记录中不存在)。但是使用相同的键,android java代码可以正常工作。
Android代码使用accessKey,secrectKey和sessionToken,但是iOS代码仅使用accessKey和secrectKey。
2015-06-01 19:42:55.747 AWSV2Test [2191:170157]图像位于/ Users / jpsasi / Library / Developer / CoreSimulator / Devices / E846AC10-82BE-40AA-BB7E-29796A8FAD2B / data / Containers / Bundle / Application / B59E9032-306D-4609-97D6-6C516638463A / AWSV2Test.app / testimage.png
2015-06-01 19:42:56.841 AWSV2Test [2191:170157]上传32677/35516字节
2015-06-01 19:42:56.842 AWSV2Test [2191:170157]上传35516/35516字节
2015-06-01 19:42:56.843 AWSV2Test [2191:170157]上传35516/35516字节
2015-06-01 19:43:00.249 AWSV2Test [2191:170157]上传32677/35516字节
2015-06-01 19:43:00.250 AWSV2Test [2191:170157]上传的35516/35516字节
2015-06-01 19:43:00.251 AWSV2Test [2191:170157]上传35516/35516字节
2015-06-01 19:43:02.848 AWSV2Test [2191:170157]上传32677/35516字节
2015-06-01 19:43:02.849 AWSV2Test [2191:170157]上传35516/35516字节
2015-06-01 19:43:02.850 AWSV2Test [2191:170157]上传35516/35516字节
2015-06-01 19:43:05.285 AWSV2Test [2191:170157]上传32677/35516字节
2015-06-01 19:43:05.286 AWSV2Test [2191:170157]上传35516/35516字节
2015-06-01 19:43:05.287 AWSV2Test [2191:170157]上传35516/35516字节
2015-06-01 19:43:06.681 AWSV2Test [2191:170157]错误=>错误域= com.amazonaws.AWSS3ErrorDomain代码= 3“操作无法完成。(com.amazonaws.AWSS3ErrorDomain错误3。) UserInfo = 0x7faea40171d0 {HostId = GeMapgMjrv43TZ4yFKmTjIw6EsZafbgk3GH9ATtbgIj1VpNNv6EjhmZhobHVm + / 2,Message =您提供的AWS Access Key ID在我们的记录中不存在。AWSAccessKeyId= 371,RequestIDId = 473
最佳答案
如果要使用在服务器上生成的临时凭据,则需要实现自己的凭据提供程序。我建议采用以下方法:
AWSCredentialsProvider
来实现您的凭据提供程序。以AWSWebIdentityCredentialsProvider
和AWSCognitoCredentialsProvider
的实现为例。该凭据提供者应:- refresh
时启动凭据刷新过程。 我鼓励您看看Amazon Cognito Identity。借助Amazon Cognito,您可以通过使用 public 登录提供程序(例如Amazon,Facebook,Google和任何OpenID Connect兼容提供程序)或使用您自己的用户身份系统来创建用于访问AWS云服务的唯一最终用户标识符。它涵盖了许多自定义凭据提供程序用例,并且更易于使用和管理。