Я ищу способ загрузки изображений, созданных в моем приложении 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
Кто-нибудь знает, как решить эту проблему?
ТНХ,
пингвин