Mule3 Загрузить вложение на SFTP-сервер - PullRequest
0 голосов
/ 11 апреля 2020

Я хочу загрузить вложения в том виде, как они есть, на сервер SFTP, полученный с HTTP-входа. Эти файлы могут быть любого типа, например XML, JSON, txt et c.

Я пробовал эти примеры кодов, но проблема в том, что загружаемые файлы не в том формате, который я отправил. Он всегда хранится на FTP-сервере, как 1f144250-7b46-11ea-a605-38f9d3744a4d.dat.

    <flow name="FtpUp">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/attach1" doc:name="Copy_of_HTTP"/>
        <logger message="#[message.inboundAttachments.size()]" level="INFO" doc:name="Copy_of_Logger"/>
        <foreach collection="#[message.inboundAttachments]" doc:name="Copy_of_For Each">
            <set-payload value="#[payload.dataSource.content]" doc:name="Set Payload"/>
            <byte-array-to-string-transformer doc:name="Byte Array to String"/>
            <set-attachment attachmentName="test.txt" value="#[payload]" contentType="text/plain" doc:name="Attachment"/>
            <sftp:outbound-endpoint exchange-pattern="request-response" host="" port="22" path="" user="" password="" responseTimeout="10000" doc:name="SFTP"/>
        </foreach>
    </flow>
    <flow name="Copy_of_FtpUp">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/attach2" doc:name="Copy_of_Copy_of_HTTP"/>
        <foreach collection="#[message.inboundAttachments]" doc:name="Copy_of_Copy_of_For Each">
            <set-payload value="#[payload.dataSource.content]" doc:name="Set Payload"/>
            <sftp:outbound-endpoint exchange-pattern="request-response" host="" port="22" path="" user="" password="" responseTimeout="10000" doc:name="Copy_of_SFTP" disableTransportTransformer="true"/>
        </foreach>
    </flow>

enter image description here

Может кто-нибудь помочь мне разобраться с отсутствующей частью? Я просто хочу загрузить файл, так как я получаю входящий HTTP. Я использую Mulesoft 3 (3.9.4 EE).

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Возможно, проблема в том, что исходящая конечная точка SFTP не устанавливает атрибут outputPattern для определения имени выходного файла. Значением по умолчанию является идентификатор сообщения, который объясняет имена, которые вы получаете.

outputPattern

Шаблон, используемый при записи файла на диск. Это может использовать шаблоны, поддерживаемые анализатором имени файла, настроенным для этого соединителя. По умолчанию используется ссылка на транспорт файлов. См. Этот же раздел документа для получения информации о том, как переопределить синтаксический анализатор по умолчанию.

Тип: String

По умолчанию: идентификатор сообщения, например, ee241e68-c619-11de-986b-adeb3d6db038

Также поток отправляет файлы в виде вложений. Соединитель SFTP ожидает, что содержимое файла, подлежащего передаче, будет в полезной нагрузке.

0 голосов
/ 12 апреля 2020

Ниже приведен фрагмент рабочего кода после предложения @aled.

<flow name="FtpUp">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/attach2" doc:name="HTTP"/>
    <foreach collection="#[message.inboundAttachments]" doc:name="Iterate attachments ">
        <set-variable variableName="fileName" value="#[payload.dataSource.part.fileName]" doc:name="Set File Name"/>
        <set-payload value="#[payload.dataSource.content]" doc:name="Set Payload"/>
        <sftp:outbound-endpoint exchange-pattern="request-response" host="" port="22" path="" user="" password="" responseTimeout="10000" doc:name="SFTP Server" disableTransportTransformer="true" outputPattern="#[flowVars.fileName]"/>
    </foreach>
</flow>
...