Видео загрузки ASIFormDataRequest работает в симуляторе iPhone, но не работает с iPhone для файлов размером более 1,5 МБ - PullRequest
1 голос
/ 14 марта 2012

Я использую ASIHTTPFormDataRequest для загрузки видеофайла.Я знаю, что мой код работает, потому что когда я загружаю видео на iPhone размером менее 1,5 МБ (низкое качество менее 1 минуты 40 секунд), оно успешно публикуется.Я был убежден, что это проблема с сервером, поэтому мы проводили все тесты и возвращались безуспешно.Только на днях я смог успешно загрузить большой файл в симуляторе iPhone.Файл был более 5 МБ и высокого качества.Поэтому я вынужден верить, что это как-то связано с самим устройством iPhone.Я погуглил шторм и вернулся с тем же глупым ответом: проблема с сервером.Ну, не ...

Вот мой код:

-(void) post:(NSData *) pVideoData progressBarView:(UIProgressView *) pProgressBarView{ 

    pVideoData = [NSData dataWithContentsOfFile: m_pAppDelegate.m_pAppData.m_pPhotoURL]; 
  NSString *urlAddress = [NSString stringWithString:@"https://api.sitename.com/action/upload"];
NSURL *url = [NSURL URLWithString:urlAddress];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];


[request setPostValue:API_KEY forKey:@"api_key"];
[request setPostValue: m_pAppDelegate.m_pAppData.m_sTokenKey forKey:@"user_token"];


[request setPostValue: @"somename" forKey:@"tag"];
[request setPostValue: [AppData getIPAddress] forKey:@"ip"];



[request setData:pVideoData forKey:@"file"];


request.numberOfTimesToRetryOnTimeout = 3;
[request setDelegate:self];
  [request showAccurateProgress];

[request setShouldStreamPostDataFromDisk:YES];
[request setDidFinishSelector:@selector(postRequestSuccess:)];
[request setDidFailSelector:@selector(postRequestFailed:)];
[request startAsynchronous];
    [request setUploadProgressDelegate: pProgressBarView];}

Все отлично работает.Обратите внимание, что я уже попробовал следующее: синхронная загрузка и набор файлов.Но я не верю, что проблема заключается в моем коде или моем сервере.

Вот данные, которые я получаю при загрузке: пожалуйста, обратите внимание на различия между ними.

УСПЕШНАЯ ВИДЕО ЗАГРУЗКА:

2012-03-13 14:31:06.413 MYAPP[7805:707] [STATUS] Starting asynchronous request <ASIFormDataRequest: 0xb9bc00>
2012-03-13 14:31:06.543 MYAPP[7805:8c07] 
==== Building a multipart/form-data body ====
--0xKhTmLbOuNdArY-26765320-0965465416-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="api_key"

*SECRET    --0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="user_token"

Br300MCw4P-l06SFITFCHdiifBHdOCPczX0Y830Yfabox3wLMPs2s7MlWTAS7F2TlwuhL2kiZ7mEXeDWkmDi5g
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="tag"

NPSH Live
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="ip"

61.197.151.129
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="longitude"

-122.357832
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="latitude"

47.781178
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="file"; filename="file"
Content-Type: application/octet-stream

[920870 bytes of data]
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66--
==== End of multipart/form-data body ====
2012-03-13 14:31:06.550 MYAPP[7805:8c07] [CONNECTION] Request <ASIFormDataRequest: 0xb9bc00> will not use a persistent connection
2012-03-13 14:31:06.819 MYAPP[7805:8c07] [THROTTLING] ===Used: 238 bytes of bandwidth in last measurement period===
wait_fences: failed to receive reply: 10004003
2012-03-13 14:31:07.992 MYAPP[7805:8c07] [THROTTLING] ===Used: 327680 bytes of bandwidth in last measurement period===
2012-03-13 14:31:09.053 MYAPP[7805:8c07] [THROTTLING] ===Used: 655360 bytes of bandwidth in last measurement period===
2012-03-13 14:31:09.820 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb9bc00> finished uploading data
2012-03-13 14:31:10.070 MYAPP[7805:8c07] [THROTTLING] ===Used: 860720 bytes of bandwidth in last measurement period===
2012-03-13 14:31:11.320 MYAPP[7805:8c07] [THROTTLING] ===Used: 0 bytes of bandwidth in last measurement period===
2012-03-13 14:31:11.835 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb9bc00> received response headers
2012-03-13 14:31:11.843 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb9bc00> finished downloading data (105 bytes)
2012-03-13 14:31:11.854 MYAPP[7805:8c07] [STATUS] Request finished: <ASIFormDataRequest: 0xb9bc00>

Не удалось загрузить:

[STATUS] Starting asynchronous request <ASIFormDataRequest: 0xb8e200>
wait_fences: failed to receive reply: 10004003
2012-03-13 14:21:03.093 MYAPP[7805:8c07] 
==== Building a multipart/form-data body ====
--0xKhTmLbOuNdArY-E6B28382AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="api_key"

*secret
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="user_token"

Br300MCw4P-l06SFITFCHdiifBHdOCPczX0Y830Yfabox3wLMPs2s7MlWTAS7F2TlwuhL2kiZ7mEXeDWkmDi5g
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="tag"

test
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="ip"

81.197.151.699
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="longitude"

-122.357874
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="latitude"

47.781192
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="file"; filename="file"
Content-Type: application/octet-stream

[3280300 bytes of data]
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E    --
==== End of multipart/form-data body ====
2012-03-13 14:21:03.099 MYAPP[7805:8c07] [CONNECTION] Request <ASIFormDataRequest: 0xb8e200> will not use a persistent connection
2012-03-13 14:21:03.354 MYAPP[7805:8c07] [THROTTLING] ===Used: 2500 bytes of bandwidth in last measurement period===
2012-03-13 14:21:04.605 MYAPP[7805:8c07] [THROTTLING] ===Used: 0 bytes of bandwidth in last measurement period===
2012-03-13 14:21:05.698 MYAPP[7805:8c07] [THROTTLING] ===Used: 458752 bytes of bandwidth in last measurement period===
2012-03-13 14:21:06.744 MYAPP[7805:8c07] [THROTTLING] ===Used: 688128 bytes of bandwidth in last measurement period===
2012-03-13 14:21:07.755 MYAPP[7805:8c07] [THROTTLING] ===Used: 1114112 bytes of bandwidth in last measurement period===
2012-03-13 14:21:08.855 MYAPP[7805:8c07] [THROTTLING] ===Used: 950272 bytes of bandwidth in last measurement period===
2012-03-13 14:21:09.897 MYAPP[7805:8c07] [THROTTLING] ===Used: 458752 bytes of bandwidth in last measurement period===
2012-03-13 14:21:11.050 MYAPP[7805:8c07] [THROTTLING] ===Used: 393216 bytes of bandwidth in last measurement period===
2012-03-13 14:21:12.085 MYAPP[7805:8c07] [THROTTLING] ===Used: 917504 bytes of bandwidth in last measurement period===
2012-03-13 14:21:13.104 MYAPP[7805:8c07] [THROTTLING] ===Used: 458752 bytes of bandwidth in last measurement period===
2012-03-13 14:21:13.858 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb8e200> finished uploading data
2012-03-13 14:21:14.354 MYAPP[7805:8c07] [THROTTLING] ===Used: 1123122 bytes of bandwidth in last measurement period===
2012-03-13 14:21:15.014 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb8e200> received response headers
2012-03-13 14:21:15.017 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb8e200> finished downloading data (76 bytes)
2012-03-13 14:21:15.034 MYAPP[7805:8c07] [STATUS] Request finished: <ASIFormDataRequest: 0xb8e200>

Итак, что вы думаете, ребята, проблема может быть.Еще одно замечание: я пытался использовать другие соединения Wi-Fi, а также отключить Wi-Fi, 3g и отключить 3g и только с помощью Wi-Fi.Как вы думаете, есть ли пределы того, сколько пользователь может загрузить на iPhone?

ОДНО ПОСЛЕДНЕЕ ПРИМЕЧАНИЕ:

Загрузка, очевидно, прошла успешно, но я предполагаю, что файл, который я загружаю, становится недействительным все вместе,Мой сервер отвечает успешно, говоря мне, что все установлено и все в порядке, кроме самого видеофайла.Видео файл недействителен.Тем не менее, он работает в симуляторе ...

РЕДАКТИРОВАТЬ !!

Я ТОЛЬКО ЗАКОНЧИЛ ИСПОЛЬЗОВАТЬ РАЗНЫЙ МЕТОД ДЛЯ ЗАГРУЗКИ, И Я ПОЛУЧИЛ ТОЧНЫЕ ОДНО ОШИБКИ ДЛЯ ТОЧНЫХ ЖЕ ОБСТОЯТЕЛЬНЫХ ОБСТОЯТЕЛЬСТВ, ТАК ЯНАЧИНАЮТ ДУМАТЬ, ЧТО ЭТО ЧТО-ТО С МОИМ ФАЙЛАМИ?МОЖЕТ ЛИ ЕГО ПАМЯТЬ?

 NSURL *remoteUrl = [NSURL URLWithString:@"http://api.mysite.com/upload"];

NSURL *myfile = [NSURL URLWithString:m_pAppDelegate.m_pAppData.m_PendingInfo.m_pMovieURL];


NSData * photoImageData = [NSData dataWithContentsOfFile: m_pAppDelegate.m_pAppData.m_PendingInfo.m_pMovieURL];
NSError **error;



  // [photoImageData writeToFile:filePath atomically:YES];

   AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:remoteUrl];
NSMutableURLRequest *afRequest = [httpClient multipartFormRequestWithMethod:@"POST" 
                                                                       path:@"" 
                                                                 parameters:nil 
                                                  constructingBodyWithBlock:^(id <AFMultipartFormData>formData) 
                                  {
                                      [formData appendPartWithFormData:[API_KEY dataUsingEncoding:NSUTF8StringEncoding] 
                                                                  name:@"api_key"];
                                      [formData appendPartWithFormData:[m_pAppDelegate.m_pAppData.m_sTokenKey dataUsingEncoding:NSUTF8StringEncoding] 
                                                                  name:@"user_token"];


                                      [formData appendPartWithFileData:photoImageData 
                                                                  name:@"file" 
                                                              fileName:@"test.mov" 
                                                              mimeType:@"video/quicktime"]; 
                                      [formData appendPartWithFileURL:myfile name:@"file" error:error];
                                  }
                                  ];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest];
[operation setUploadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) {

    NSLog(@"Sent %d of %d bytes", totalBytesWritten, totalBytesExpectedToWrite);

}];

[operation setCompletionBlock:^{
    NSLog(@"%@", operation.responseString); //Gives a very scary warning
}];

[operation start];   

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Вам необходимо увеличить timeOutSeconds вашего запроса. Время запроса по умолчанию составляет 60 секунд. Вы можете увеличить его до 10 минут (600 секунд).

[request setTimeOutSeconds:600];

Вам также необходимо проверитьмаксимальный размер загружаемого файла, указанный в вашем php. Пожалуйста, пройдите по этой ссылке, это может вам помочь.http://drupal.org/node/97193

0 голосов
/ 16 июня 2014

Оказалось, проблема в моем файле .htpconfig. У меня был жестко установленный предел. Регулировка работала как шарм!

...