2013-06-20 1 views
1

В моем приложении Rails я использую Paperclip для загрузки фотографий и их сохранения в S3. Поэтому я хотел использовать эту функциональность в своем приложении для iOS. Я получил загрузку изображений для работы в моем приложении RubyMotion, используя this gist, но он был невероятно медленным. Увидев этот датированный выпуск в Paperclip, я попробовал другой подход: https://github.com/thoughtbot/paperclip/issues/254#issuecomment-321507.RubyMotion Загрузка изображения с iOS в Rails/S3 с использованием Formotion и BubbleWrap

Итак, я попытался использовать 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 «)? Есть ли способ ускорить этот процесс вообще со всеми двоичными данными, которые я передаю на свой сервер?

ответ

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

Надеется, что это помогает.

+0

Похоже, пришло время переместиться из BubbleWrap в AFMotion. Благодаря! – tvalent2

+0

@ tvalent2, пожалуйста, отметьте ответ как принятый, если этот ответ сработал для вас! – siekfried