2017-10-17 4 views
0

Je veux envoyer un fichier dans une requête HTTP POST et ensuite télécharger Mule le fichier dans un répertoire de fichiers sur un serveur en utilisant FTP. Il semble que le connecteur FTP enregistre la charge utile dans le répertoire du fichier, mais cette entrée est nulle et un fichier vide est écrit dans le répertoire par FTP. J'ai eu un certain succès avec le flux binaire/octet comme type de support dans la requête raml et http en utilisant Postman mais le fichier ne s'ouvre pas et semble être corrompu et quand j'utilise des données de formulaire comme Le type de média dans la requête raml et http s'affiche en tant que paire de valeurs de clé dans message.inboundAttachments mais comment puis-je obtenir le connecteur FTP à écrire à partir d'inboundAttachments. J'ai essayé de le définir comme la charge utile qui montre comme un objet javax mais a des problèmes lors de l'écriture dans le répertoire du fichier. Comment puis-je faire cela et quelle est la meilleure approche à adopter? Les fichiers seraient des fichiers> = 1 et pourraient être des types de fichiers différents. Je suis actuellement en train de le tester avec un fichier.Comment envoyer un fichier dans une requête HTTP et le télécharger sur le serveur de fichiers via FTP dans Mule

De plus, lorsque le fichier est écrit, il s'appelle 28f42420-b325-11e7-8ffb-dcb320524153.dat. Comment puis-je spécifier le nom car il ressemble à message.inboundProperties.originalFilename est null? J'utilise Anypoint Studio 6.2 et Mule 3.8.3 et Postman pour faire les appels http car la console Mule ne semble pas donner l'option d'envoyer un fichier dans la requête.

RAML

/ftp: 
    displayName: FTP Test 
    description: Send file to directory using FTP 
    post: 
     description: Send file 
     body: 
     binary/octet-stream: 
     multipart/form-data: 
     application/x-www-form-urlencoded: 
      properties: 
      file: 
       description: The file to be uploaded 
       required: true 
       type: file 
     responses: 
     200: 
      body: 
      application/json: 

flux XML actuel

<flow name="sendFtpFile"> 
    <set-payload value="#[message.inboundAttachments.file]" doc:name="Set Payload"/> 
    <ftp:outbound-endpoint host=${host} port="21" path=${filePath} user=${user} password=${pwd} connector-ref="FTP" responseTimeout="10000" doc:name="FTP"/> 
</flow> 

Merci

Répondre

2

RAML d'envoyer plusieurs fichiers à Mule api/point final pourrait être défini comme mentionné en réponse à la poste ci-dessous-

Send multiple Files in HTTP request using RAML

Pour lire ces fichiers dans Mule api, vous pouvez utiliser un pour-chaque construction, quelque chose comme ci-dessous pourrait être utile:

<foreach doc:name="For Each" collection="#[message.inboundAttachments]"> 
     <set-payload value="#[payload.dataSource.content]" doc:name="Set Payload"/> 
     <byte-array-to-string-transformer doc:name="Byte Array to String"/> 
     <logger message="Content :- #[payload]" level="INFO" doc:name="Logger"/> 

</foreach> 

lire Une fois que vous pouvez modifier ou transformer le fichier en tant que nécessaire et l'ajouter en pièce jointe à l'aide set-attachement

<set-attachment attachmentName="requiredFile.xml" value="#[payload]" contentType="text/xml" doc:name="Attachment"/> 

et puis ans Vous pouvez l'envoyer au connecteur FTP requis.

+0

Merci. Je cherche à nommer le nom de fichier comme nom de fichier original + horodatage. Y a-t-il un moyen d'obtenir cette information? message.inboundProperties.originalFilename semble être vide – user3165854

+0

utilisez # [payload.dataSource.part.fileName] pour obtenir le nom de la pièce jointe .. –

+0

Merci beaucoup pour votre aide. Son éclairci beaucoup de requêtes que j'avais autour de la façon de passer les fichiers dans Mule. Merci – user3165854