gpt4 book ai didi

ios - AWS S3 上传 - 使用 AccessKey、SecretKey 和 SessionToken - iOS SDK

转载 作者:行者123 更新时间:2023-12-01 17:51:04 25 4
gpt4 key购买 nike

我正在开发 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 类

  1. AWSCognitoCredentialsProvider
  2. AWSStaticCredentialsProvider
  3. AWSWebIdentityCredentialsProvider

AWSStaticCredentialsProvider 类仅接受 accessKeysecretKey。其他 2 个类需要不同的参数。

当我使用带 accessKey 和 secretKey 的 AWSStaticCredentialsProvider 上传图片时,我收到以下错误消息

Upload failed: [Error Domain=NSURLErrorDomain Code=-1017 "cannot parse response" UserInfo=0x7f8773f70ee0 {NSUnderlyingError=0x7f8773f4bbb0 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1017.)", NSErrorFailingURLStringKey=https://s3.amazonaws.com/playfiksprofilepictures/429bfd812ea08e706bab868f3cd8b9c6.jpg, NSErrorFailingURLKey=https://s3.amazonaws.com/playfiksprofilepictures/429bfd812ea08e706bab868f3cd8b9c6.jpg, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-1, NSLocalizedDescription=cannot parse response}]

此错误消息不清楚是凭据提供程序的问题还是其他问题

非常感谢任何帮助解决此问题

谢谢

编辑

我已经使用了@user3467204提供的示例程序

这是带有错误消息的输出(您提供的 AWS 访问 key ID 在我们的记录中不存在)。但是使用相同的 key ,android java 代码可以正常工作。

Android代码使用accessKey、secrectKey和sessionToken,而iOS代码只使用accessKey和secrectKey。

2015-06-01 19:42:55.747 AWSV2Test[2191:170157] Image is at /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] Uploaded 32677 / 35516 bytes 2015-06-01 19:42:56.842 AWSV2Test[2191:170157] Uploaded 35516 / 35516 bytes 2015-06-01 19:42:56.843 AWSV2Test[2191:170157] Uploaded 35516 / 35516 bytes 2015-06-01 19:43:00.249 AWSV2Test[2191:170157] Uploaded 32677 / 35516 bytes 2015-06-01 19:43:00.250 AWSV2Test[2191:170157] Uploaded 35516 / 35516 bytes 2015-06-01 19:43:00.251 AWSV2Test[2191:170157] Uploaded 35516 / 35516 bytes 2015-06-01 19:43:02.848 AWSV2Test[2191:170157] Uploaded 32677 / 35516 bytes 2015-06-01 19:43:02.849 AWSV2Test[2191:170157] Uploaded 35516 / 35516 bytes 2015-06-01 19:43:02.850 AWSV2Test[2191:170157] Uploaded 35516 / 35516 bytes 2015-06-01 19:43:05.285 AWSV2Test[2191:170157] Uploaded 32677 / 35516 bytes 2015-06-01 19:43:05.286 AWSV2Test[2191:170157] Uploaded 35516 / 35516 bytes 2015-06-01 19:43:05.287 AWSV2Test[2191:170157] Uploaded 35516 / 35516 bytes 2015-06-01 19:43:06.681 AWSV2Test[2191:170157] error => Error Domain=com.amazonaws.AWSS3ErrorDomain Code=3 "The operation couldn’t be completed. (com.amazonaws.AWSS3ErrorDomain error 3.)" UserInfo=0x7faea40171d0 {HostId=GeMapgMjrv43TZ4yFKmTjIw6EsZafbgk3GH9ATtbgIj1VpNNv6EjhmZhobHVm+/2, Message=The AWS Access Key Id you provided does not exist in our records., AWSAccessKeyId=ASIAIFYM7NXH3CSNXY3Q, Code=InvalidAccessKeyId, RequestId=653371138733BE48}

最佳答案

如果您想使用在您的服务器上生成的临时凭据,您需要实现您自己的凭据提供程序。我推荐以下方法:

  1. 在您的服务器上生成访问 key 、 secret key 和 session token 。您有多种语言选择,包括 Java、.NET、PHP、Ruby、Python 和 Node.js。
  2. 通过符合 AWSCredentialsProvider 来实现您的凭据提供程序。以 AWSWebIdentityCredentialsProviderAWSCognitoCredentialsProvider 的实现为例。该凭证提供者应该:
    • 从您的服务器检索访问 key 、 secret key 和 session key 。
    • 将它们保存在本地直到它们过期。
    • 在请求时返回凭据。
    • 如果它们已过期,请从您的服务器重新检索它们。
    • 在调用 -refresh 时启动凭据刷新过程。

我鼓励你看一看 Amazon Cognito Identity .借助 Amazon Cognito,您可以使用公共(public)登录提供商(例如 Amazon、Facebook、Google 和任何 OpenID Connect 兼容提供商)或使用您自己的用户身份系统来创建唯一的最终用户标识符以访问 AWS 云服务。它涵盖了许多自定义凭据提供程序用例,并且更易于使用和管理。

关于ios - AWS S3 上传 - 使用 AccessKey、SecretKey 和 SessionToken - iOS SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30573006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com