1

我在 iOS 中使用 AWS S3TransferManager 时遇到了一个奇怪的问题。当我使用短期凭证发送它们时,我的 putObjectRequests 似乎挂在 32kb 上。这是我的应用程序的设置方式:

我有一个模型可以将图像上传到 S3。它使用以下方法来做到这一点:

- (void)putFileToS3:(NSData *)file withFilename:(NSString *)filename
{
  S3PutObjectRequest *por = [[S3PutObjectRequest alloc] initWithKey:filename inBucket:@"my-bucket"];
  por.data = file;
  por.cannedACL = [S3CannedACL publicRead];
  [self.tm upload:por];
}

self.tm 是该对象的 s3TransferManager 属性。相关部分在对象初始化期间设置,如下所示:

self.s3 = [[AmazonS3Client alloc] initWithAccessKey:accessKey withSecretKey:secretKey];
self.tm = [S3TransferManager new];
self.tm.s3 = self.s3;
self.tm.delegate = self;

s3 和 tm 是强属性:

@property (strong, nonatomic) AmazonS3Client *s3;
@property (strong, nonatomic) S3TransferManager *tm;

当我第一次测试这个时,我只是将 accessKeyId 和 secretAccessKey 粘贴到对象中。但是,这不是推荐的方法,所以我在我的服务器上设置了 STS,现在正在服务器上生成用于应用程序的短期凭据。

我的 ruby​​ 服务器正在使用 ruby​​ SDK 生成短期凭证,如下所示:

sts = AWS::STS.new
policy = AWS::STS::Policy.new
policy.allow :actions => ["s3:*"], :resources => "arn:aws:s3:::my-app-bucket/#{self.id}/*"
session = sts.new_federated_session "plc_user_#{id}",:policy => policy

代码仍然有效 - 除了 - 现在我使用的是短期凭证,所有传输都停止在 32768 字节传输。小于那个的文件没问题,更大的文件永远挂在那里。

有没有人遇到过类似的问题?这里的问题是凭据、上传代码还是其他问题?

4

0 回答 0