如何在HTTP请求中发送文件并通过Mule中的FTP将其上载到文件服务器

时间:2017-10-17 09:24:24

标签: ftp mule anypoint-studio raml

我想在HTTP POST请求中发送文件,然后让Mule使用FTP将文件上传到服务器上的文件目录。看起来FTP连接器将有效负载保存到文件目录中,但这是作为null传递的,并且通过FTP将空文件写入目录。

我在使用Postman的raml和http请求中使用二进制/八位字节流作为媒体类型取得了一些成功,但文件没有打开,看起来它可能已损坏,当我使用表单时 - 数据作为raml和http请求中的媒体类型,它在message.inboundAttachments中显示为键值对,但如何从inboundAttachments中获取FTP连接器。我已经尝试将其设置为显示为javax对象的有效负载,但在将其写入文件目录时会出现问题。我怎么能这样做,最好的方法是什么?文件将是> = 1的文件,并且可以是不同的文件类型。我目前只是用一个文件测试它。

此外,写入文件时名为28f42420-b325-11e7-8ffb-dcb320524153.dat。如何指定名称,因为它看起来像message.inboundProperties.originalFilename为null?

我使用Anypoint Studio 6.2和Mule 3.8.3和Postman进行http调用,因为Mule控制台似乎没有提供在请求中发送文件的选项。

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:

当前的XML流程

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

由于

1 个答案:

答案 0 :(得分:2)

RAML将多个文件发送到Mule api / endpoint可以定义为回答下面的帖子中提到的 -

Send multiple Files in HTTP request using RAML

在Mule api中读取这些文件,您可以使用for-each构造,如下所示:

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

阅读完毕后,您可以根据需要修改或转换文件,并使用设置附件

将其添加为附件
<set-attachment attachmentName="requiredFile.xml" value="#[payload]" contentType="text/xml" doc:name="Attachment"/>

然后然后您可以将其发送到所需的FTP连接器