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

如何在Mule中通过HTTP请求发送文件并通过FTP上传到文件服务器,ftp,mule,anypoint-studio,raml,Ftp,Mule,Anypoint Studio,Raml,我想在HTTP POST请求中发送一个文件,然后让Mule使用FTP将该文件上载到服务器上的文件目录。看起来FTP连接器将有效负载保存到文件目录中,但这是以null形式出现的,并且FTP会将一个空文件写入目录中 我使用Postman成功地将binary/octet stream作为raml和http请求中的媒体类型,但文件没有打开,并且看起来可能已损坏。当我在raml和http请求中使用表单数据作为媒体类型时,它在message.inboundAttachments中显示为一个键值对,但如何让F

我想在HTTP POST请求中发送一个文件,然后让Mule使用FTP将该文件上载到服务器上的文件目录。看起来FTP连接器将有效负载保存到文件目录中,但这是以null形式出现的,并且FTP会将一个空文件写入目录中

我使用Postman成功地将binary/octet stream作为raml和http请求中的媒体类型,但文件没有打开,并且看起来可能已损坏。当我在raml和http请求中使用表单数据作为媒体类型时,它在message.inboundAttachments中显示为一个键值对,但如何让FTP连接器写入来自内置附件。我尝试将它设置为显示为javax对象的有效负载,但在将其写入文件目录时遇到问题。我怎样才能做到这一点?最好的方法是什么?文件应该是大于等于1的文件,并且可以是不同的文件类型。我目前正在用一个文件测试它

此外,在写入文件时,文件名为28f42420-b325-11e7-8ffb-DCB32052413.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>  


感谢

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

在Mule api中读取这些文件,可以对每个构造使用一个,如下所示可能很有用:

<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连接器

RAML将多个文件发送到Mule api/端点可以定义为以下帖子的答案中所述-

在Mule api中读取这些文件,可以对每个构造使用一个,如下所示可能很有用:

<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连接器

谢谢。我希望将文件名命名为原始文件名+时间戳。有没有办法得到这些信息?message.inboundProperties.originalFilename似乎为空,非常感谢您的帮助。它消除了我对如何在Mule中传递文件的许多疑问。谢谢,谢谢。我希望将文件名命名为原始文件名+时间戳。有没有办法得到这些信息?message.inboundProperties.originalFilename似乎为空,非常感谢您的帮助。它消除了我对如何在Mule中传递文件的许多疑问。谢谢