4

我已经为这个问题苦苦挣扎了一个多星期!

我无法将图像从我的 iphone 发布到配置了 carrierwave gem 的后端 rails 服务器。通过网络表单发布也可以,通过 JSON 从 iphone 发布文本也可以。

这是我的照片控制器:

  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

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

我从服务器得到的响应是:

“EOFError(错误的内容正文)”

用php服务器测试objective-c代码,上传成功!所以我想我的问题与我的 rails/carrierwave 设置有关。请帮助我从我的 iPhone 和我的 Rails 服务器中获取血腥图像。

非常感谢您的帮助。

4

1 回答 1

2

为什么不尝试使用 ASIHTTPRequest进行 POST?

它有很多方便的方法来发布多部分数据,而且效果很好。这样,您可能会排除在尝试手动构建请求正文时可能发生的错误可能引起的问题......

于 2011-04-05T11:52:06.193 回答