Очень странная (для меня) проблема при загрузке файлов на сервер с помощью ASIFormDataRequest.
При загрузке по Wi-Fi проблем нет, я могу загрузить нормально. При загрузке через 3G с использованием O2 UK в качестве оператора связи тоже нет проблем. Когда я загружаю с использованием того же самого кода тот же сервер, использующий Vodafone UK, HTTP-запрос поступает на сервер с удаленным содержимым POST. Если я попробую тот же запрос, но без загрузки изображения (просто добавьте test => yes в качестве некоторых данных POST), тогда это сработает, но если у меня есть test => yes и прикрепите файл, он прибудет на сервер с POST данные удалены.
NB. Я использую последнюю версию ASIHTTPRequest на iPhone 4S, и она воспроизводится на нескольких других телефонах, использующих Vodafone UK и O2 UK по-разному.
Итак, я указываю свой код objc на следующий сценарий PHP, который просто распечатывает то, что он получил:
Я использую код obj-c:
- (void)viewDidLoad
{
[super viewDidLoad];
NSURL *url = [NSURL URLWithString: @"http://myserver.com/debugger.php"];
ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:url];
[request setDelegate:self];
[request setDidFinishSelector:@selector(networkRequestSuccess:)];
[request setDidFailSelector:@selector(networkRequestFailure:)];
[request setTimeOutSeconds:120];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"smalltestimage" ofType:@"png"];
NSData *myData = [NSData dataWithContentsOfFile:filePath];
if (myData) {
[request addPostValue:@"Yes" forKey:@"Test"];
[request addData:myData withFileName:@"smalltestimage.png" andContentType:@"image/png" forKey:@"photos"];
[request startSynchronous];
}
else{
NSLog(@"File not found..");
}
[request autorelease];
}
- (void)networkRequestSuccess:(ASIHTTPRequest *)request{
NSLog(@"Success Response: %@", [request responseString]);
}
- (void)networkRequestFailure:(ASIHTTPRequest *)request{
NSLog(@"Fail Response: %@", [request responseString]);
}
Если я запускаю приложение с Wi-Fi включен, или на O2 UK, я получаю следующий ответ:
Success Response: FILES: Array
(
[photos] => Array
(
[name] => smalltestimage.png
[type] => image/png
[tmp_name] => /tmp/phpYTdw4g
[error] => 0
[size] => 13211
)
)
POST: Array
(
[Test] => Yes
)
GET: Array
(
)
done.
Пока все хорошо!
Если я попытаюсь повторить попытку с отключенным Wi-Fi, но с почти полным сигналом 3G на Vodafone UK:
Success Response: FILES: Array
(
)
POST: Array
(
)
GET: Array
(
)
done.
Очень странно: теперь отсутствует не только файл, но и «тестовое» значение POST. Однако никаких ошибок ни от PHP, ни от ASIHTTPRequest.
Может ли кто-нибудь пролить на меня свет? Если Vodafone манипулирует подобными вещами, почему об этом мало известно? Единственный человек, которого я могу найти, сообщающий о подобной проблеме , опубликованный год назад .
Если я закомментирую строку [request addData], то она отлично работает:
Success Response: FILES: Array
(
)
POST: Array
(
[Test] => Yes
)
GET: Array
(
)
done.
Очень странно. Я пытался заставить это работать весь день, но пока безуспешно. Я был бы очень признателен, если бы кто-нибудь мог пролить свет или даже столкнулся с той же проблемой.