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 バイトで停止します。それよりも小さいファイルは問題ありませんが、それよりも大きいファイルは永遠にそこにハングアップします。
誰かが同様の問題に遭遇しましたか? ここでの問題は、資格情報、アップロード コード、または何か他のものですか?