Почему мои $ _FILES остаются пустыми, когда я публикую данные в target-c на сервере?

0

Я пытаюсь послать одну часть текста на сервер, но пока не повезло. То, что я делаю, - это использовать код ниже для отправки строки на сервер. Чтобы проверить, получает ли сервер какие-либо данные, я использую следующее:

<?php
     print_r($_FILES);
?>

ПОЧЕМУ СТРОКА:

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:@"http://[webaddress]/[page].php"]];
    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
    [request setHTTPShouldHandleCookies:NO];
    [request setTimeoutInterval:30];
    [request setHTTPMethod:@"POST"];

    NSString *boundary = @"V2ymHFg03ehbqgZCaKO6jy";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request setValue:contentType forHTTPHeaderField: @"Content-Type"];

    NSMutableData *body = [NSMutableData data];

    [body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",@"test"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"%@\r\n",@"testvalue"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
           [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
           NSString *postLength = [NSString stringWithFormat:@"%d", [body length]];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody:body];
    connection=[[NSURLConnection alloc]initWithRequest:request delegate:self];
    [connection start];

В моей тестовой среде я использую реальный адрес, но для безопасности я его удалил. Я использую NSLog для возврата результата сервера (используется в делегате NSURLConnection). Но моя проблема в том, что $ _FILES продолжает возвращаться пустым? Странно то, что при использовании следующего с изображением он возвращает мне что-то:

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:@"http://[webaddress]/[page].php"]];
    [request setHTTPMethod:@"POST"];

    NSString *boundary = @"---------------------------14737809831466499882746641449";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];

    NSMutableData *body = [NSMutableData data];

    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[ NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n",name] dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[NSData dataWithData:data]];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    // setting the body of the post to the request

    [request setHTTPBody:body];
     connection=[[NSURLConnection alloc]initWithRequest:request delegate:self];
    [connection start];

Поэтому, чтобы загрузить изображение (последний фрагмент кода), $ _FILES не пуст, и при использовании первого фрагмента кода он пуст. Сервер работает нормально, и файл, используемый для возврата $ _FILES, является обычным файлом PHP. PHP работает, и тот факт, что изображение может быть загружено, дает мне представление о том, что в первой части кода есть ошибка, а не сервер.

Поэтому мой вопрос в том, почему пустые $ _FILES при загрузке обычной строки?

  • 0
    Кстати, не вызывайте start с initWithRequest если вы не используете представление с startImmediately установленным в NO . По сути, вы начинаете соединение дважды. Удалить звонок, чтобы start . См. Документацию для метода start для получения дополнительной информации.
  • 0
    Правильно, меня раздражало то, что я не получал хорошего ответа от сервера. Поэтому я попытался явно установить соединение, но мне нужно было установить init на NO.
Теги:
post

1 ответ

0
Лучший ответ

Данные/информация о $_FILES будут в $_FILES а опубликованные данные формы (строки) будут в $_POST или если вы используете данные метода get, будет в $_GET.

  • 0
    Может кто-нибудь, пожалуйста, ударил меня! Вы абсолютно правы, когда при загрузке изображения есть файл, поэтому $ _FILES не будет пустым, а при загрузке только текста он будет в $ _POST. Спасибо, еще один вопрос нуб ответил;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню