Ios 使用carrierwave将图像从iphone应用程序上载到rails应用程序

Ios 使用carrierwave将图像从iphone应用程序上载到rails应用程序,ios,objective-c,ruby-on-rails,ruby,carrierwave,Ios,Objective C,Ruby On Rails,Ruby,Carrierwave,我正在尝试使用载波通过内部api将图像从iPhone应用程序发送到rails应用程序。我把关于堆栈溢出的其他问题和在线示例的大部分代码放在一起,我以前从未做过这种事情。我没有iPhone代码,因为我们正在外包它,但我可以得到它 我的ApicController中接收请求的代码如下所示: def create_item @item = upload_image(params[:img], params[:name], params[:content_type], params[:fil

我正在尝试使用载波通过内部api将图像从iPhone应用程序发送到rails应用程序。我把关于堆栈溢出的其他问题和在线示例的大部分代码放在一起,我以前从未做过这种事情。我没有iPhone代码,因为我们正在外包它,但我可以得到它

我的ApicController中接收请求的代码如下所示:

  def create_item
    @item = upload_image(params[:img], params[:name], params[:content_type], params[:file_size])
  end

  private

  def upload_image(img, name, content_type, file_size)
    encoded_img = Base64.encode64(img)
    io = FilelessIO.new(Base64.decode64(encoded_img))
    io.original_filename = "#{name}"
    item = Item.new

    item.cover = io
    item.content_type = content_type
    item.file_size = file_size
    item.save!(validate: false)
    item
  end
当他们发送请求时,参数看起来像下面的代码,它给他们一个500错误

Parameters: {"img"=>#<ActionDispatch::Http::UploadedFile:0x007fc3b1f4f570 @original_filename="avatar.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"img\"; filename=\"avatar.png\"\r\nContent-Type: image/png\r\n", @tempfile=#<Tempfile:/tmp/RackMultipart20130703-2-hfx7gg>>;, "controller"=>"api/v1/api", "action"=>"create_item", "uid"=>"100003052137695"}

您得到的错误表明iPhone正在发送实际文件,而您希望它从代码中发送Base64字符串

与您的iPhone团队核实并商定所需的格式:

  • 他们发送Base64字符串,您应该通过此错误
  • 更改代码以接受文件(类似于
    item.cover=params[:img]

  • HTH

    您收到的错误表明iPhone正在发送实际文件,而您希望它从代码中发送Base64字符串

    与您的iPhone团队核实并商定所需的格式:

  • 他们发送Base64字符串,您应该通过此错误
  • 更改代码以接受文件(类似于
    item.cover=params[:img]
  •   no implicit conversion of ActionDispatch::Http::UploadedFile into String
      vendor/ruby-2.0.0/lib/ruby/2.0.0/base64.rb:38:in `pack'