Файл изображения API для загрузки iPhone на Ruby on Rails - PullRequest
2 голосов
/ 10 ноября 2010

Я бэкэнд-разработчик Rails API, который обслуживает несколько клиентов iPhone. Я не разработчик iPhone.

Мне нужно принять двоичные данные (в данном случае несколько файлов изображений) от клиента через POST-запрос к API.

Чтобы получить содержимое файла (метаданные файла, отличные от типа изображения, здесь не важны), какие инструменты могут использовать разработчики iPhone? Я нашел ObjectiveResource (используется iPhone на Rails) и ASIHTTPRequest. На страницах, которые я нашел для них, нет указания на то, какую форму будет иметь загруженный файл при выполнении действия контроллера. Это будет объект Ruby File или Tempfile? Я не контролирую разработку кода для iPhone, там есть некоторые межкультурные трудности общения, и они до сих пор не использовали эти предложения. Если я смогу предоставить им более качественную информацию, возможно, я получу более точные данные.

Бэкэнд-приложение в настоящее время работает на Rails 2.3.10 и скоро (в ближайшие несколько недель), вероятно, будет преобразовано в Rails 3.

Спасибо, Craig

Ответы [ 2 ]

2 голосов
/ 10 ноября 2010

ObjectiveResource не поддерживает загрузку файлов. Попробуйте вместо этого использовать ASIHTTPRequest с этим фрагментом:

NSURL *url = [NSURL URLWithString:@"http://localhost:3000/file"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"Sample" forKey:@"name"];
[request setFile:... forKey:@"file"];
[request startSynchronous];

Подробнее см. На странице примера здесь (отправка данных).

Сообщение будет закодировано как стандартное сообщение из нескольких частей (как если бы оно пришло из формы HTML). Если вы используете скрепку для хранения своих загрузок, волшебство просто случится!

1 голос
/ 15 ноября 2010

Использовать JSON через HTTP

NSMutableURLRequest *request = 
  [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:urlStr]]; 
 [request setHTTPMethod: @"POST"];
 [request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
 NSString* requestDataLengthString = [[NSString alloc] initWithFormat:@"%d", [jsonMessageStr length]];
 [request setValue:requestDataLengthString forHTTPHeaderField:@"Content-Length"];
 [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
 [request setHTTPBody:jsonData];
 NSURLConnection *theConnection = 
  [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...