RubyMotion使用Formotion和BubbleWrap将图像从iOS上传到Rails / S3

时间:2013-06-20 00:02:49

标签: ios image rubymotion

在我的Rails应用程序中,我使用Paperclip上传照片并将其存储在S3中。所以我想把这个功能带到我的iOS应用程序中。我使用this gist将图像上传到我的RubyMotion应用程序中,但速度非常慢。在Paperclip中看到此日期问题后,我尝试了另一种方法:https://github.com/thoughtbot/paperclip/issues/254#issuecomment-321507

所以我尝试使用BubbleWrap的:form_data :format并传递UIImage.UIImageJPEGRepresentation(@form.render[:photo], 1)来查看是否会加快速度。但它不起作用。似乎所选择的任何照片实际上都没有正确渲染,因为我在服务器中没有看到任何照片参数。 UIImage.UIImageJPEGRepresentation(@form.render[:photo], 1)的输出看起来不正确。

我的Formotion表格:

@form = Formotion::Form.new({
  title: "Settings",
  sections: [{
    title: "Personal Information",
    rows: [{
      title: "Photo",
      type: :image,
      key: :photo,
      value: @profile_photo
    }, {
      title: "Name",
      type: :string,
      placeholder: "Name",
      key: :name,
      value: @profile['name']
    }]
  }]
})

我的BubbleWrap PUT更新个人资料:

profile_photo = UIImage.UIImageJPEGRepresentation(@form.render[:photo], 1)

data = {
  'profile[name]'    => @form.render[:name],
  'profile[photo]'   => profile_photo,
  'user[api_token]'  => CONFIG.user.api_token,
  _method:              'PUT'
}

BW::HTTP.post("#{DEFAULT_URL}/profiles/#{CONFIG.user.profile_id}", { format: :form_data, payload: data }) do |response|
  parsed_response = BW::JSON.parse(response.body.to_str)
  if response.ok?
    @data = parsed_response
    self.dismissViewControllerAnimated(true, completion:lambda { parent.load_profile() })
  else
    App.alert("#{parsed_response.first}")
  end
end

所以我的问题是:我必须像使用.pack(“m0”)一样建议对图像进行编码吗?有没有办法加速这个过程,我将所有二进制数据传递给我的服务器?

1 个答案:

答案 0 :(得分:2)

我不知道用BubbleWrap做这件事但是......

..这是一个使用AFMotion上传文件的示例(这是AFNetworking的包装)。

client = AFMotion::Client.build("your endpoint") do
  header "Accept", "application/json"
  operation :json
end

image = my_function.get_image
data = UIImagePNGRepresentation(image)

client.multipart.post("avatars") do |result, form_data|
  if form_data
    # Called before request runs
    # see: https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ
    form_data.appendPartWithFileData(data, name: "avatar", fileName:"avatar.png", mimeType: "image/png")
  elsif result.success?
    ...
  else
    ...
  end
end

您可能需要查看AFMotion here

的文档/示例

希望它有所帮助。