#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=»Содержимое-Расположение: форма-данные; имя = «изображение»;…