Загрузка изображений из Flex в Rails с помощью Paperclip - PullRequest
0 голосов
/ 08 февраля 2010

Я ищу способ загрузки изображений, созданных в моем приложении flex, на рельсы. Я пытался использовать скрепку, но, похоже, она не работает.

У меня есть этот урок здесь: http://blog.alexonrails.net/?p=218

Проблема в том, что они используют FileReference для поиска файлов на клиентском компьютере. Они вызывают функцию .upload (...) и отправляют данные в контроллер загрузки. Но я использую URLLoader для загрузки изображения, которое модифицировано в моем Flex-приложении. Во-первых, вот код из учебника:

private function selectHandler(event:Event):void {
var vars:URLVariables = new URLVariables(); 
var request:URLRequest = new URLRequest(uri); 
request.method = URLRequestMethod.POST; 
vars.description = "My Description"; 
request.data = vars;
var uploadDataFieldName:String = 'filemanager[file]'; 
fileReference.upload(request, uploadDataFieldName);
}

Я не знаю, как это установить

var uploadDataFieldName:String = 'filemanager[file]';

в URLLoader. У меня есть данные изображения, сжатые как JPEG в ByteArray. Это выглядит так:

    public function savePicture():void {
        var filename:String = "blubblub.jpg";

        var vars:URLVariables = new URLVariables();
        vars.position = layoutView.currentPicPosition;
        vars.url = filename;
        vars.user_id = 1;
        vars.comic_id = 1;
        vars.file_content_type = "image/jpeg";
        vars.file_file_name = filename;

        var rawBytes:ByteArray = new JPGEncoder(75).encode(bitmapdata);
        vars.picture = rawBytes;

        var request:URLRequest = new URLRequest(Data.SERVER_ADDR + "pictures/upload");

        request.method = URLRequestMethod.POST;
        request.data = vars;

        var loader:URLLoader = new URLLoader(request);
        loader.addEventListener(Event.COMPLETE, savePictureHandler);
        loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandlerUpload);
        loader.load(request);
    }

Если я установлю переменную var.picture URLVariable в bytearray, то получу ошибку, что загрузка равна нулю. Вот часть Rails:

Picture-модель:

требуется 'скрепка'

class Picture < ActiveRecord::Base

  # relations from picture
  belongs_to :comic
  belongs_to :user
  has_many :picture_bubbles
  has_many :bubbles, :through => :picture_bubbles  

  # attached file for picture upload -> with paperclip plugin
  has_attached_file :file, :path => "public/system/pictures/:basename.:extension"

end

и контроллер изображения с функцией загрузки:

class PicturesController < ApplicationController

  protect_from_forgery :except => :upload

  def upload
    @picture = Picture.new(params[:picture])
    @picture.position = params[:position]
    @picture.comic_id = params[:comic_id]
    @picture.url = params[:url]
    @picture.user_id = params[:user_id]


    if @picture.save
      render(:nothing => true, :status => 200)
    else
      render(:nothing => true, :status => 500)
    end
  end
end

Кто-нибудь знает, как решить эту проблему?

ТНХ, пингвин

1 Ответ

0 голосов
/ 08 февраля 2010

Попробуйте изменить "filemanager [file]" на "picture [file]". Я думаю, что это как-то связано с сопоставлением его с контроллером.

Проверьте RestfulX , они решили эту проблему очень хорошо. В частности, посмотрите на их <a href="http://github.com/dima/restfulx_framework/blob/master/framework/src/org/restfulx/services/http/XMLHTTPServiceProvider.as" rel="nofollow noreferrer">XMLHTTPServiceProvider#uploadFile</a> метод. У них есть другая реализация, подобная той, которую вы написали. Я использую его сейчас в нескольких проектах с Paperclip, и он отлично работает.

Я думаю, что их пример приложения Pomodo on Rails на github использует скрепку для загрузки изображения профиля.

Надеюсь, это поможет, Lance

...