3 votes

Envoyer le fichier vers le point de terminaison d'entrée de Mule

Je cherche à envoyer un formulaire avec un fichier et deux inputs à un point d'entrée entrant Mule. J'ai un custom-processor, et un flux défini de cette manière:

Dans la classe MyfileUploadProcessor:

public class MyfileUploadProcessor implements MessageProcessor {

    @Override
    public MuleEvent process(MuleEvent event) throws MuleException {
        // TODO Auto-generated method stub
        String response = "success";

        MuleMessage mulemessage = event.getMessage();

        String countryCode = mulemessage.getInboundProperty("username");
        String sourceCode = mulemessage.getInboundProperty("password");
        InputStream input = (InputStream) mulemessage.getPayload();

...

Et pour tester, un simple html:

   Code pays :
   Code source :
   Fichier :

Le problème est que je n'arrive pas à créer un fichier à partir de la charge utile du mulemessage et je ne sais pas comment récupérer la valeur des inputs dans le formulaire...qu'est-ce que je fais de mal? Des indices?

Merci d'avance

3voto

David Dossot Points 20153

Vous devez configurer le connecteur HTTP pour utiliser le org.mule.transport.http.HttpMultipartMuleMessageFactory afin de gérer les HTTP POSTs multipart/form-data.

Pour cela, ajoutez ce qui suit à votre configuration:

Avec cela en place, le champ de formulaire payload deviendra la charge utile en streaming du message Mule et toutes les autres valeurs des champs seront dans les pièces jointes entrantes (toute entête de partie sera dans les en-têtes entrants).

1voto

Richard Donovan Points 435

Excellente réponse de David (un sauveur pour moi !! bravo david) pour ce que ça vaut quelques éléments supplémentaires que je n'avais pas réalisés au début le httpConnector doit être utilisé comme référence de transport http un flux complet serait

J'ai pu télécharger en utilisant jmeter en ajoutant deux pièces jointes, la première

  • a un nom de paramètre = "payload" et un type mime="multipart/form-data"
  • la deuxième a un nom spécifique à l'utilisateur, par exemple "attachment"

Cela peut ensuite être traité par un flux mule normal, ou un composant

public String process(@Payload String payload, @InboundAttachments("*") Map headers  ) throws IOException{     
    InputStream in  = headers.get("attachment").getDataSource().getInputStream();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X