Attachment_fu, API et Application desktop java

Salut à tous,

Dans le cadre du développement de notre service, nous sommes en train
de créer une application desktop en java qui permettra d’envoyer
directement une image à notre application rails.
Cette image est codée en base64 du côté java et les informations sont
envoyées en xml.
Nous utilisons attachment_fu pour gérer les images dans notre
application rails.

Dans notre model auquel est rattachée cette image, nous nous sommes
servi de ce snippet :
http://snippets.dzone.com/posts/show/3994

et avons fait :

def javafile=(base64file)
self.uploaded_data = JavaFileUpload.new(base64file, self.title)
end

et avons ajouté la classe :

class JavaFileUpload

 @@filepath = File.join(RAILS_ROOT, 'public/tmp', 'javatemp/')
 EXTENSIONS = {
   "image/jpeg" => ["jpg", "jpeg", "jpe"],
   "image/gif" => ["gif"],
   "image/png" => ["png"]
 }
 attr_reader :original_filename, :attachment_data

 def initialize(base64file, title)

Là on crée un fichier temporaire à partir du “base64file”

Le fichier est bien créé et valide , je vous passe donc le code de

ça
# Dans @completelink on a le chemin local complet vers le
fichier
@attachment_data = open(@completelink)
@original_filename = title #(le title contient le nom complet
de l’image avec l’extension)
end
end

 # Pass things like size, content_type, path on to the downloaded

file
def method_missing(symbol, *args)
if self.attachment_data.respond_to? symbol
self.attachment_data.send symbol, *args
else
super
end
end

end

Malheureusement, nous obtenons à chaque fois :

NoMethodError (undefined method size' for #<Upshot::JavaFileUpload: 0x26ff7dc>): /app/models/upshot.rb:211:in method_missing’
/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb:
305:in uploaded_data=' /app/models/upshot.rb:150:in javafile=’
/app/controllers/upshots_controller.rb:90:in `create’

et nous ne comprenons pas cette erreur.
Merci d’avance si un pro d’attachment_fu saurait nous donner une piste
sur ce problème :slight_smile:

Le 25 juin 2008 10:45, Romain Durritçague a écrit :

Dans notre model auquel est rattachée cette image, nous nous sommes
servi de ce snippet :
http://snippets.dzone.com/posts/show/3994

Le premier problème vient de là, le snippet a pour but :
“Make a remote URL work like a file upload (in Rails)”

or si j’ai bien compris ton but, tu ne traites pas d’url ici.

@@filepath = File.join(RAILS_ROOT, 'public/tmp', 'javatemp/')
   # Le fichier est bien créé et valide , je vous passe donc le code de ça

    # Dans @completelink on a le chemin local complet vers le

fichier
@attachment_data = open(@completelink)

Essaie avec File.open.

[…]

et nous ne comprenons pas cette erreur.
Merci d’avance si un pro d’attachment_fu saurait nous donner une piste
sur ce problème :slight_smile:

Ce n’est pas une question d’être un pro d’attachment_fu ou pas.
C’est d’essayer d’agréger des bouts de code à gauche à droite,
sans bien comprendre lesdits bouts de code. Alors quand on
assemble forcément, faut prier pour que ce patchwork veuille bien
marcher.

– Jean-François.


http://twitter.com/underflow_

ma fraise :

    @attachment_data = open(@completelink)

Essaie avec File.open.

Euh, non. En créant un fichier temporaire, plutôt (Tempfile).

– Jean-François.


http://twitter.com/underflow_

2008/6/25 Romain Durritçague [email protected]:

et avons ajouté la classe :

  end
end

305:in uploaded_data=' /app/models/upshot.rb:150:in javafile=’
/app/controllers/upshots_controller.rb:90:in `create’

et nous ne comprenons pas cette erreur.
Merci d’avance si un pro d’attachment_fu saurait nous donner une piste
sur ce problème :slight_smile:

Je rejoins ce qu’a dit JF sur le point des agrégations de code.

Sinon en fait uploaded_data prend en valeur un IO. Donc forcement si
tu lui donnes une classe X quelconque ca utilisera des méthodes de IO
que tu n’as pas implémenter.

Donc soit tu implémentes les methodes qui manque (Merci le
duck-typing), soit tu lis le code d’attachment_fu, il est vraiment pas
compliqué. Je l’ai lu des dizaines de fois sans souci.


Cyril M.

Ola,

Cela pourra t’aider ainsi que d’autres. Il existe un plugin pour faire
ce genre de trucs (utilisation de attachment_fu sans avoir a manipuler
des IO et cie). Il s’appelle: AttachmentFuHacks que l’on peut trouve sur
GitHub.
Attention, l’auteur ne le precise pas (a moins qu’il ait mis a jour son
README) mais ce plugin a besoin d’un autre plugin qui gere les
mime-types: MimetypeFu (GitHub - mattetti/mimetype-fu: get the mimetype of a file directly in Ruby).
voila voila.

Did