2

ステップ1:ここでリクエストを作成しています

NSMutableURLRequest *request1 = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST"
                                                                                           URLString:[NSString stringWithFormat:@"%@%@", API_MAIN_URL, IMAGE_UPLOAD]
                                                                                          parameters:param constructingBodyWithBlock:^(id formData) {

           [formData appendPartWithFileURL:[NSURL fileURLWithPath:strImagePath] 
                                      name:@"sendimage" 
                                  fileName:[strImagePath lastPathComponent] 
                                  mimeType:@"image/png"
                                     error:nil];
                                       } error:nil];
[request1 setValue:authToken forHTTPHeaderField:@"Authorization"];

ステップ 2:ここでは、特定の場所にストリームを作成しています

[[AFHTTPRequestSerializer serializer] requestWithMultipartFormRequest:request1 
                                          writingStreamContentsToFile:[NSURL fileURLWithPath:[strImagePath stringByDeletingPathExtension]] 
                                                    completionHandler:^(NSError *error){

ステップ 3:ここでは、アップロード タスクを作成しています。

        ///here is file
        NSProgress *progress = nil;
        NSURLSessionUploadTask *uploadTask = [self.manager uploadTaskWithRequest:request1
                                                                        fromFile:[NSURL fileURLWithPath:strImagePath]
                                                                        progress:&progress
                                                               completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
                                                                       NSLog(@"response : %@\n\n responseObject : %@\n\n error : %@", response, responseObject, error);

                                                               }];
        [uploadTask resume];
    }
                                                    }];
}

私の問題は、アプリケーションがバックグラウンド モードに移行する前に、HTTPBodyStep:1 と Step:2 を使用して指定された場所にすべてのリクエスト (HTTPStream) を書き込み、ファイル内 (アプリケーションNSArrayのフォアグラウンド内) にすべてを書き込んだ後にすべてのリクエストを保存したいということです。HTTPStream画像をアップロードする準備をします。

次に、ステップ 3 の助けを借りてバックグラウンド タスクの作成を開始しますNSArray。このアプローチでは、画像をアップロードできません。

しかし、すべてのステップを 1 つずつ呼び出すと、サーバーに画像がアップロードされますが、このアプローチでは、特定の場所に書き込む必要があるため、アプリケーションは作成リクエストに対してフォアグラウンドにある必要がありHTTPBodyます。

この問題を解決するのを手伝ってください。私は過去 2 週間からこの問題に行き詰まっています。私のアプリケーションでは、サーバー経由で 500 を超える画像をアップロードする必要がありました。

4

2 に答える 2

0

このようにしてみてください

 NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
                [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil];
            } error:nil];

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
        NSProgress *progress = nil;

        NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
            if (error) {
                NSLog(@"Error: %@", error);
            } else {
                NSLog(@"%@ %@", response, responseObject);
            }
        }];

        [uploadTask resume];
于 2015-05-15T05:39:51.617 に答える
0

このタスクを完了し、再開せずにすべてのアップロード タスクを作成し、作成後にすべてのタスクを NSArray 内に保存します。すべてのタスクが作成されたら、すべてのタスクを再開するメソッドを呼び出します。

于 2015-06-08T05:48:27.743 に答える