私のアプリケーションは、iPhone から 3G 接続を介してマルチパート ファイルのアップロードを実行できるようにするために、ここで説明する手法を実装しています。デリゲートをアクションにプラグインすることもでき、アップロードの進行状況を監視できます。ただし、アップロードが完了した後、ファイルは存在しません。
さらに詳しく調べてみると、SDK に不正な URL と思われるものが見つかりました。関連するコードは次のとおりです。
__strong AmazonS3Client *s3 = [[AmazonS3Client alloc] initWithAccessKey:kS3Access withSecretKey:kS3Secret];
s3.timeout = 240;
s3ResponseHandler = [[S3ResponseHandler alloc] init];
S3InitiateMultipartUploadRequest *initReq = [[S3InitiateMultipartUploadRequest alloc] initWithKey:[filePath lastPathComponent] inBucket:kS3Bucket];
initReq オブジェクトは、最終的に、url プロパティを持つ S3Request から継承します。次の行で、[filePath lastPathComponent] の値とその url プロパティをログに記録します。
NSLog(@"filePath lastComp: %@", [filePath lastPathComponent]);
NSLog(@"initReq URL: %@", [initReq url]);
結果:
filePath lastComp: filename.ext
initReq URL: https://<bucketname>.(null)/filename.ext
URL は(null) ではなく、https://bucketname.s3.amazonaws.comであるべきだと思います。
これが、SDK がアップロードをプッシュするために使用している URL である場合、明らかに機能しません! この問題と回避策をさらに診断するために、どのようなトラブルシューティング手順を実行できるかを誰か提案できますか? SDK のバグのように感じますが、私は自分自身をそれほど信頼していません。
現在 (この記事を書いている時点で) 1.3.0 バージョンの SDK を使用しています。