Почтовый запрос с iPhone с использованием ASIFormDataRequest не работает

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

    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);

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

ИЗМЕНИТЬ Я обнаружил, что для star.png требуется полный адрес файла. Теперь POST работает нормально, но ни имя, ни изображение не сохраняются в БД. Создается новый пост с пустым именем и изображением. Есть идеи, почему?


person John    schedule 04.05.2011    source источник
comment
Каков ответ на запрос?   -  person Alex Terente    schedule 04.05.2011
comment
Вы угрожаете ошибкой для запроса?   -  person Alex Terente    schedule 04.05.2011
comment
Проблема заключалась в том, что мне пришлось указать весь адрес файла для star.png. Теперь сервер получает POST, но по какой-то причине он не записывается в базу данных.   -  person John    schedule 04.05.2011
comment
Так что проблема на стороне сервера, а не в приложении для iPhone.   -  person Alex Terente    schedule 04.05.2011
comment
серверная часть в порядке. загрузка работает нормально из браузера. что-то не так с тем, как я делаю запрос на iphone.   -  person John    schedule 04.05.2011


Ответы (2)


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

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

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

NSURL *url=[[NSURL alloc] initWithString:@"http://yourservername:3000/posts"];
person Mujah Maskey    schedule 04.05.2011
comment
Можешь мне ответить? Какой у вас IP-адрес сервера rails и IP-адрес iPhone? Я хочу, чтобы вы указали IP-адрес веб-сервера, например: webserverip:3000/posts - person Mujah Maskey; 04.05.2011
comment
Вы можете проверить одну вещь :), что вы получите, если поместите localhost:3000 на свой iPhone Safari? - person Mujah Maskey; 04.05.2011
comment
Я получаю свое приложение rails на локальном хосте: 3000. IPhone сейчас подключается к серверу. мне просто нужно сохранить в БД. Это та часть, которая не работает. Я обновил вопрос. - person John; 04.05.2011
comment
как вы говорите мне, что ваш iPhone подключается к вашему локальному хосту: 3000? Вы пытались поместить этот http-адрес в сафари на своем iphone и подтвердить? - person Mujah Maskey; 04.05.2011

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» — это путь к вашему изображению. Полный путь.

person Alex Terente    schedule 04.05.2011
comment
Я исправил эту часть. Теперь он не будет сохранен в БД. Вот журнал успешной публикации из браузера: Параметры: {commit=›Create Post, post=›{name=›119am, image=›#‹ActionDispatch::Http::UploadedFile:0x104038d10 @content_type=image/png, @original_filename=Скриншот 01-05-2011 в 21.21.28 PM.png,... и вот один из них, когда я отправлял сообщения с iphone: Параметры: {name=›Ben, image=›#‹ActionDispatch::Http:: UploadedFile: 0x103efd4a0 @content_type=image/jpeg, @original_filename=beach.jpeg, @headers=Content-Disposition: form-data; имя=\изображение\;... - person John; 04.05.2011