3

私は iPhone プロジェクトに AFnetworking を使用しています。Objective C の初心者です。

ここで説明するように、ブロックを使用して複数のファイルをアップロードする方法を知っています : How do you upload multiple files with AFNetworking

したがって、ブロックに必要な数の formData 要素を追加できます。

しかし、私の場合、ユーザーは自由に多くの写真を選択できるため、何枚の写真があるかわかりません。画像のデータは配列に格納されます。

だから私はブロックにそのようなことを試みましたが、最後の要素だけがアップロードされます:

for(NSDictionary *dict in imagesInfo) {

      UIImage *theFile = [dict objectForKey:UIImagePickerControllerOriginalImage];
      NSData *imageData = UIImageJPEGRepresentation(theFile, 0.5);
     [formData appendPartWithFileData:imageData name:@"name" fileName:@"name.jpg" mimeType:@"image/jpeg"];

}

とにかく、最初のリクエストが終了したときに別のリクエストを起動することで、それを機能させることができました。しかし、それを機能させるための最良の方法があると思いますか?

たくさんのタンク、

ロドルフ

4

3 に答える 3

3

AFNetworkingには、リクエストの「バッチ」を管理するための優れたユーティリティがいくつかあります。AFHTTPClientクラスから特に考慮する必要がある3つのメソッドがあります。

enqueueBatchOfHTTPRequestOperationsWithRequests//バッチの場合enqueueBatchOfHTTPRequestOperations//バッチの場合enqueueHTTPRequestOperation//単一のリクエストの場合

基本的に、写真の配列をループして、NSMutableURLRequestの新しい配列を作成します(おそらく今行っているのとほぼ同じです)。写真ごとに、NSMutuableURLRequestまたはHTTPRequestOperationのいずれかを作成し、配列にポップします。上記の方法のいずれかを使用して、HTTPURLリクエストの新しい配列をAFNetworkingに渡します。

アップロードプロセスをバッチとして管理する場合は、バッチ方法の1つを使用します。ファイアアンドフォーゲットしたいだけの場合は、enqueueHTTPRequestOperationを使用してください。これにより、AFNetworkingのすべての幸福が得られます。

これは次のようになります。

AFHTTPClient *photoUploader = [[AFHTTPClient alloc] init];
[photoUploader enqueueBatchOfHTTPRequestOperationsWithRequests:self.photosWrappedInNSURLS   progressBlock:^(NSUInteger numberOfCompletedOperations, NSUInteger totalNumberOfOperations) {

    //block gets called after each succesful operation
    //useful for messages like 1 of 3 complete

} completionBlock:^(NSArray *operations) {

    //block gets called after all requests are complete
}];

ドキュメントを読むと、AFHTTPClientの独自のサブクラスを作成し、それをシングルトンとして構築することが提案されます。そのように使用する必要はありませんが、同じホストまたはサービスに戻る複数のタイプの接続がある場合に非常に便利です。前回のプロジェクトで非常に便利で、非常に成功しました。

それがうまくいくことを願っています

于 2012-08-26T18:26:31.883 に答える
0

ASIHTTPRequest ライブラリを試してください。このライブラリを使用すると、複数のファイルを同時に、または 1 つずつダウンロード/アップロードできます: http://allseeing-i.com/ASIHTTPRequest/How-to-use

于 2012-08-26T14:13:46.257 に答える
0

ファイルごとに異なる名前を指定する必要があります。それで直ると思います。

于 2012-10-01T20:58:26.117 に答える