在我的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”)一样建议对图像进行编码吗?有没有办法加速这个过程,我将所有二进制数据传递给我的服务器?
答案 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
的文档/示例希望它有所帮助。