4 votes

JSON et carrierwave problème iphone

Je suis confronté à ce problème depuis plus d'une semaine !

Je n'arrive pas à envoyer les images de mon iphone vers un serveur rails avec la gem carrierwave configurée. Je n'ai pas de problème pour envoyer des images depuis mon iphone vers un serveur rails backend avec la gemme carrierwave configurée.

Voici mon contrôleur de photos :

  class PhotosController < ApplicationController
  def new
    @photo = Photo.new(:user_id => params[:user_id])
  end

  def create
    @photo  = current_user.photos.build(params[:photo])
    if @photo.save

      respond_to do |format|
         format.html { flash[:notice] = "Successfully created photo."
         redirect_to @photo.user 
         }
         format.json { 
          render :json => {:action => 'create', :owner => current_user}
        }
      end
    else
      render :action => 'new'
    end
  end

et voici le code objective-c :

UIImage *image  = [UIImage imageNamed:@"moon.png"];
    NSData *imageData = UIImagePNGRepresentation(image);

    NSString *urlString=[NSString stringWithFormat:@"http://127.0.0.1:3000/photos.json"];
    // setting up the URL to post to

    // setting up the request object now
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"POST"];

    NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];

    NSMutableData *body = [NSMutableData data];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];    
    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"ipodfile.jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[NSData dataWithData:imageData]];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    // setting the body of the post to the reqeust
    [request setHTTPBody:body];

    // now lets make the connection to the web
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

    NSLog(returnString);

la réponse que j'obtiens du serveur est la suivante :

"EOFError (bad content body)"

le code objective-c a été testé avec un serveur php et le téléchargement a réussi ! Je pense donc que mon problème est lié à ma configuration rails/carrierwave. Aidez-moi à faire sortir ces satanées images de mon iPhone et à les transférer sur mon serveur rails.

votre aide est très appréciée.

2voto

uvesten Points 2616

Pourquoi ne pas essayer ASIHTTPRequest pour le POSTing ?

Il dispose de nombreuses méthodes pratiques pour afficher des données multipartites et fonctionne très bien. De cette façon, vous pouvez probablement exclure les problèmes qui pourraient découler d'éventuelles erreurs qui se produisent lorsque vous essayez de construire le corps de la requête manuellement...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X