2010-11-10 4 views
2

Je suis un développeur backend Rails d'une API qui dessert plusieurs clients iPhone. Je ne suis pas un dev de l'iPhone.Fichier d'image d'API télécharger l'iPhone sur Ruby on Rails

J'ai besoin d'accepter des données binaires (plusieurs fichiers image dans ce cas) du client via une requête POST à ​​l'API.

Pour obtenir le contenu du fichier (les métadonnées de fichiers autres que le type d'image ne sont pas pertinentes ici), quels outils pourraient être utilisés par le développeur de l'iPhone? J'ai trouvé ObjectiveResource (utilisé par iPhone on Rails) et ASIHTTPRequest. Dans les pages que j'ai trouvées pour ceux-ci, il n'y a aucune indication de la forme que le fichier téléchargé aura quand l'action du contrôleur est exécutée. S'agira-t-il d'un objet Ruby File ou d'un objet Tempfile? Je ne contrôle pas le développement du code de l'iPhone, il y a des difficultés de communication interculturelle, et ils n'ont pas encore utilisé ces suggestions. Si je peux leur soumettre une meilleure information, je pourrais obtenir de meilleures données.

L'application backend est en cours d'exécution Rails 2.3.10, et bientôt (dans les prochaines semaines) probablement transformé en Rails 3.

Merci, Craig

Répondre

2

ObjectiveResource ne supporte pas nativement le fichier uploads. Essayez plutôt à l'aide ASIHTTPRequest avec cet extrait:

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

Pour plus de détails, voir la page d'exemple here (envoi de données).

Le message sera codé en tant que message de formulaire standard en plusieurs parties (comme s'il provenait d'un formulaire HTML). Si vous utilisez un trombone pour stocker vos vidéos, la magie va arriver!

1

Use JSON over 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];