Не работает отправка запроса с iPhone с использованием ASIFormDataRequest

#iphone #ruby-on-rails-3 #http-post #asihttprequest

#iPhone #ruby-on-rails-3 #http-post #asihttprequest

Вопрос:

Новичок в Rails / iOS здесь. У меня есть приложение rails для ведения блога. Я пытаюсь загрузить сообщение с iOS, используя метод HTTP POST с ASIFormDataRequest. Вот код, который вызывается get:

     NSURL *url=[[NSURL alloc] initWithString:@"http://localhost:3000/posts"];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    [request setPostValue:@"Ben" forKey:@"name"];

    [request setFile:@"star.png" forKey:@"image"]; 
    [request startSynchronous];  
    NSString *response = [request responseString];
    NSLog(@"response:: %@", response);
  

Когда я запускаю этот код, ничего не происходит. С моим сервером не удается связаться. Я получаю ответ:: (null). Есть идеи, почему?

РЕДАКТИРОВАТЬ Я обнаружил, что в файле star.png должен быть указан полный адрес файла. Теперь POST работает нормально, но ни имя, ни изображение не сохраняются в базе данных. Создается новая запись с пустым именем и изображением. Есть идеи, почему?

Комментарии:

1. Каков ответ на запрос?

2. Вы угрожаете ошибкой для запроса?

3. Проблема заключалась в том, что мне пришлось указать полный адрес файла для star.png. Теперь сервер получает POST, но по какой-то причине он не записывается в базу данных.

4. Итак, проблема на стороне сервера, а не в приложении для iPhone.

5. на стороне сервера все в порядке. загрузка отлично работает из браузера. что-то не так с тем, как я делаю запрос на iphone.

Ответ №1:

почему вы используете localhost здесь?

 NSURL *url=[[NSURL alloc] initWithString:@"http://localhost:3000/posts"];
  

используйте IP вашего веб-сервера вместо localhost

 NSURL *url=[[NSURL alloc] initWithString:@"http://yourservername:3000/posts"];
  

Комментарии:

1. можете ли вы мне сказать? какой у вас IP-адрес сервера rails и IP-адрес iphone? Я хочу, чтобы вы указали ip веб-сервера, например: webserverip: 3000 / posts

2. вы можете проверить одну вещь :), что вы получите, если поставите localhost: 3000 на свой iPhone safari?

3. Я получаю свое приложение rails на localhost: 3000. iphone сейчас подключается к серверу. мне просто нужно это сохранить в db. Это та часть, которая не работает. Я обновил вопрос.

4. как вы сказали мне, что ваш iPhone подключается к вашему localhost: 3000? вы пытались ввести этот http-адрес в свой iphone safari и получить подтверждение?

Ответ №2:

 NSData *imageData = [NSData dataWithContentsOfFile:imagePath];
NSURL *url=[[NSURL alloc] initWithString:@"http://localhost:3000/posts"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"Ben" forKey:@"name"];

[request setPostValue:imageData forKey:@"image"]; 
[request startSynchronous];
  

Для «ImagePath» это путь к вашему изображению. Полный путь.

Комментарии:

1. Я исправил эту часть. Теперь он не будет сохранен в базе данных. Вот журнал успешной публикации из браузера: Параметры: {«commit»=>»Create Post», «post»=>{«name» =>»119am», «image» =>#<ActionDispatch::Http:: Загруженный файл: 0x104038d10 @content_type=»image / png», @original_filename=»Снимок экрана 2011-05-01 от 21.11.28 PM.png», … и вот один из тех, что я публикую с iphone: Параметры: {«name» => «Ben», «image» =>#<ActionDispatch::Http:: Загруженный файл: 0x103efd4a0 @content_type=»image / jpeg», @original_filename =»beach.jpeg «, @headers=»Содержимое-Расположение: форма-данные; имя = «изображение»;…