2010-02-08 4 views
0

Je cherche un moyen de télécharger des images qui ont été créées dans mon application flexible sur rails. J'ai essayé d'utiliser un trombone, mais cela ne semble pas fonctionner.Téléchargement d'images de Flex à Rails en utilisant Paperclip

J'ai ce tutoriel ici: http://blog.alexonrails.net/?p=218

Le problème est, qu'ils utilisent un FileReference pour rechercher des fichiers sur l'ordinateur des clients. Ils appellent la fonction .upload (...) et envoient les données au contrôleur de téléchargement. Mais j'utilise un URLLoader pour télécharger une image, qui est modifiée dans mon Flex-App. Tout d'abord, voici le code du tutoriel:

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); 
} 

Je ne sais pas comment définir que

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

dans un URLLoader. J'ai les données d'image compressées en JPEG dans un ByteArray. Il ressemble à ceci:

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); 
    } 

Si je mets le var.picture URLVariable au bytearray, je reçois l'erreur, que le téléchargement est nul. Voici la partie Rails:

Image-Modèle:

require 'paperclip'

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 

et le contrôleur d'image avec la fonction de téléchargement:

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 

Est-ce que quelqu'un sait comment pour résoudre ce problème?

thx, tux

Répondre

0

Essayez de changer "filemanager [fichier]" à "l'image [fichier]". Je pense que cela a quelque chose à voir avec le mappage au contrôleur. Vérifiez RestfulX, ils ont très bien résolu ce problème. Plus précisément, regardez leur méthode XMLHTTPServiceProvider#uploadFile. Ils ont là une autre implémentation comme celle que vous avez écrite. Je l'utilise maintenant dans quelques projets avec Paperclip et ça fonctionne parfaitement.

Je pense que leur exemple d'application Pomodo on Rails sur github utilise un trombone pour télécharger une image de profil.

Espérons que ça aide, Lance