1

大きなファイルを iOS からサーバーにアップロードしようとしています

私のコードは webservice を開始し、〜 180000 バイトをアップロードした後、ハングして待機し、最終的にタイムアウトします。

コードが現在座っているように。(トラブルシューティングを試みて多くのことを変更しました)

AFHTTPClient *uploadClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:k_WebService_Root]];


NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"secret"                  , @"Token",
                                   nil];
NSDictionary *requestObject = [NSDictionary dictionaryWithObject:parameters forKey:@"request"];
NSString *endpoint = [self makeEndpointWithService:k_ServiceEndpoint_Message andAction:k_WebService_Message_Upload];

NSMutableURLRequest *request = [uploadClient multipartFormRequestWithMethod:@"POST" path:endpoint parameters:requestObject constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    NSData *data = [NSData dataWithContentsOfFile: videoFile.path];
    [formData appendPartWithFileData:data name:@"file" fileName:@"message.mov" mimeType:@"video/quicktime"];
}];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

[operation setUploadProgressBlock:^(NSInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
    NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Success");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Fail\n%@", error);
}];


[operation start];

出力は常に次のようになります

2012-07-30 12:42:20.747 BMP[3290:3503] 2316966 バイトのうち 32768 を送信
2012-07-30 12:42:20.754 BMP[3290:3503] 2316966 バイトのうち 65536 を送信
2012-07-30 12:42:20.760 BMP[3290:3503] 2316966 バイト中 98304 を送信
2012-07-30 12:42:20.765 BMP[3290:3503] 2316966 バイト中 131072 を送信
2012-07-30 12:42:21.113 BMP[3290:3503] 2316966 バイト中 133452 を送信
2012-07-30 12:42:21.351 BMP[3290:3503] 2316966 バイト中 136148 を送信
2012-07-30 12:42:21.610 BMP[3290:3503] 2316966 バイト中 138844 を送信
2012-07-30 12:42:21.940 BMP[3290:3503] 2316966 バイト中 141540 を送信
2012-07-30 12:42:22.030 BMP[3290:3503] 2316966 バイト中 144236 を送信
2012-07-30 12:42:22.120 BMP[3290:3503] 2316966 バイト中 146932 を送信
2012-07-30 12:42:22.142 BMP[3290:3503] 2316966 バイト中 149628 を送信
2012-07-30 12:42:22.170 BMP[3290:3503] 2316966 バイト中 152324 を送信
2012-07-30 12:42:22.209 BMP[3290:3503] 2316966 バイトのうち 155020 を送信
2012-07-30 12:42:22.240 BMP[3290:3503] 2316966 バイト中 157716 を送信
2012-07-30 12:42:22.488 BMP[3290:3503] 2316966 バイト中 160412 を送信
2012-07-30 12:42:22.668 BMP[3290:3503] 2316966 バイト中 163108 を送信
2012-07-30 12:42:22.900 BMP[3290:3503] 2316966 バイト中 163840 を送信
2012-07-30 12:42:23.003 BMP[3290:3503] 2316966 バイト中 167152 を送信
2012-07-30 12:42:23.141 BMP[3290:3503] 2316966 バイト中 171196 を送信
2012-07-30 12:42:23.181 BMP[3290:3503] 2316966 バイト中 173892 を送信
2012-07-30 12:42:23.211 BMP[3290:3503] 2316966 バイト中 176588 を送信
2012-07-30 12:42:23.251 BMP[3290:3503] 2316966 バイト中 179284 を送信
2012-07-30 12:42:23.303 BMP[3290:3503] 2316966 バイト中 181980 を送信
2012-07-30 12:42:23.353 BMP[3290:3503] 2316966 バイト中 184676 を送信
2012-07-30 12:42:23.416 BMP[3290:3503] 2316966 バイト中 187372 を送信

そして数分後、AFNetworkingからタイムアウトを取得します

何か案は?

更新 ::: どうやら 3G 経由のアップロード中にのみ発生するようです

4

2 に答える 2

0

これはサーバー側の問題のようです。サーバーがデータを正しく受信していることを確認しましたか?

于 2012-07-30T16:58:31.750 に答える
0

iOS が 3G 経由でのアップロードを制限していることが判明しました。これはAppleのどこにも文書化されていません。

ただし、Amazon は s# フレームワークで解決しましたhttp://aws.amazon.com/articles/0006282245644577 AFNetworking には開発ブランチがあります (7/31/12) https://github.com/AFNetworking/AFNetworking/pull /418

古いASIHTTPRequestはそれを処理し、私の唯一の希望ですhttp://allseeing-i.com/ASIHTTPRequest/How-to-use#throttling_bandwidth

将来これに遭遇する人に幸運を。

于 2012-07-31T14:59:56.203 に答える