2017-10-17 3 views
0

Ich möchte eine Datei in einer HTTP POST-Anfrage senden und dann Mule die Datei in ein Dateiverzeichnis auf einem Server per FTP hochladen. Es sieht so aus, als ob der FTP-Connector die Payload in das Dateiverzeichnis speichert, aber dies wird als Null durchgehen und eine leere Datei wird per FTP in das Verzeichnis geschrieben.Wie sende ich eine Datei in einer HTTP-Anfrage und lade sie per FTP in den Dateiserver in Mule

Ich hatte etwas Erfolg mit Binär/Oktettstream als der Medientyp in der Raml und HTTP-Anfrage mit Postman aber die Datei nicht geöffnet und sieht aus wie es möglicherweise beschädigt ist und wenn ich Formulardaten als die verwenden Media-Typ in der Raml und HTTP-Anfrage zeigt es als Schlüssel-Wert-Paar in message.inboundAttachments, aber wie bekomme ich den FTP-Connector aus inboundAttachments schreiben. Ich habe versucht, es als die Nutzlast einzustellen, die als ein javax Objekt aber Probleme zeigt, wenn es in das Dateiverzeichnis schreibt. Wie kann ich das machen und was ist der beste Ansatz? Dateien wären Dateien> = 1 und könnten verschiedene Dateitypen sein. Ich teste es gerade mit einer Datei.

Wenn die Datei geschrieben wird, heißt es auch 28f42420-b325-11e7-8ffb-dcb320524153.dat. Wie kann ich den Namen angeben, wie es aussieht? Message.inboundProperties.originalFilename ist null?

Ich benutze Anypoint Studio 6.2 und Mule 3.8.3 und Postman, um die http-Aufrufe als Mule-Konsole scheint nicht die Option zum Senden einer Datei in der Anfrage zu geben.

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: 

Aktuelle XML fließen

<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> 

Dank

Antwort

2

RAML könnte mehrere Dateien Mule api/Endpunkt senden definiert werden, wie in der Antwort auf die genannten post unter-

Send multiple Files in HTTP request using RAML

Um lesen Sie diese Dateien in Mule api, können Sie eine foreach-Konstrukt, wie etwas unterhalb könnte nützlich sein:

<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> 

Einmal lesen können Sie die Datei bearbeiten oder zu transformieren, wie erforderlich und fügen sie es als Anhang mit Set-Befestigungs

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

und dann yo Sie können es an den erforderlichen FTP-Connector senden.

+0

Danke. Ich suche nach dem Dateinamen als ursprünglichen Dateinamen + Zeitstempel. Gibt es eine Möglichkeit, diese Informationen zu erhalten? message.inboundProperties.originalFilename scheint leer zu sein – user3165854

+0

Verwenden Sie # [payload.dataSource.part.fileName], um den Namen des Anhangs zu erhalten. –

+0

Vielen Dank für Ihre Hilfe. Es hat viele Fragen geklärt, die ich hatte, um die Dateien in Mule zu übergeben. Vielen Dank – user3165854

Verwandte Themen