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