3

私のアプリケーションは、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 を使用しています。

4

2 に答える 2

1

Amazon AWS サポートのおかげで、なんとかこれを理解することができました。完全な投稿はここにありますが、後世のためのナットはここにあります.

マルチパート アップロードをサポートする場合、最後の部分を除いて、ファイルは 5 MB を超える必要があることがわかりました。最初の部分が最後の部分でもあると思いました。これで、簡単なテストステートメントができました.5MB未満のファイルは「Single Put Object Request」を使用してアップロードされますが(私の質問のリンクに従って)、大きなファイルはマルチパートになります。魅力のように機能します。

于 2012-06-03T21:32:33.533 に答える
0

こんにちは、すでに答えを見つけているようですが、AWS チョップをまとめている他の人に追加の洞察を提供したいと思います。

この投稿では、アップロードと追跡の 1 つのプロセスについて詳しく説明します。また、S3TransferManager がスレッドを処理する方法についての洞察も含まれています。関連して、AWS はデータを s3 に投稿するための 2 つの重要な方法を提供しています:upload:putObjectRequest:. このメソッドupload:は、UI を停止することなく、複数のファイル/リクエストをアップロードする機能を提供します。このメソッドgetObjectRequest:は UI を停止し、転送が完了するまで別のリクエストを防ぐことができます。

繰り返しますが、リクエストの方法論と S3TransferManager がスレッドを処理する方法についての洞察を追加するだけです。

于 2014-05-09T05:10:46.737 に答える