File upload 将文件发送到Mule入站端点

File upload 将文件发送到Mule入站端点,file-upload,mule,endpoint,File Upload,Mule,Endpoint,我正在尝试向Mule入站端点发送一个包含一个文件和两个输入的表单。我有一个定制的处理器和一个定义如下的流: <custom-processor class="informa.app.classifier.transformers.MyfileUploadProcessor" name="fileuploadprocessor"></custom-processor> <flow name="httpTest"> <http:inbound-end

我正在尝试向Mule入站端点发送一个包含一个文件和两个输入的表单。我有一个定制的处理器和一个定义如下的流:

<custom-processor class="informa.app.classifier.transformers.MyfileUploadProcessor" name="fileuploadprocessor"></custom-processor>
<flow name="httpTest">
    <http:inbound-endpoint
                    address="http://tango.privada.informa:11002/services/fileupload"></http:inbound-endpoint>
    <processor ref="fileuploadprocessor"/>
</flow>
要进行测试,请使用一个简单的html:


国家代码:

源代码:

文件:

问题是我无法从mulemessage的有效负载创建文件,我不知道如何获取表单中输入的值……我做错了什么?有什么线索吗


提前感谢

您需要配置HTTP连接器以使用
org.mule.transport.HTTP.HttpMultipartMuleMessageFactory
来处理
多部分/表单数据
HTTP POST

为此,请将以下内容添加到配置中:

<http:connector name="httpConnector">
    <service-overrides messageFactory="org.mule.transport.http.HttpMultipartMuleMessageFactory"/>
</http:connector>

有了这个选项,
有效载荷
表单字段将成为Mule消息的流式有效载荷,所有其他字段值将在入站附件中(任何部分标题都将在入站标题中)。

David的回答很好(我的救命稻草!!cudos David) 对于一些我一开始没有意识到的额外项目的价值,httpConnector必须用作http传输引用,完整的流将是

<http:connector name="httpConnector" doc:name="HTTP\HTTPS">
        <service-overrides
            messageFactory="org.mule.transport.http.HttpMultipartMuleMessageFactory" />
    </http:connector>

<flow name="AttachmentTestFlow1" doc:name="AttachmentTestFlow1">        
    <http:inbound-endpoint connector-ref="httpConnector" doc:name="HTTP" exchange-pattern="request-response" host="localhost" port="8081"/>
    <component class="ProcessAttachment" doc:name="Java" />
</flow>

我可以使用jmeter上传两个附件,第一个是

  • 具有参数name=“payload”和mime type=“multipart/form data”
  • 第二个具有用户指定的名称,例如“附件”
然后可以通过正常的mule流或组件进行处理

public String process(@Payload String payload, @InboundAttachments("*") Map<String, DataHandler> headers  ) throws IOException{     
    InputStream in  = headers.get("attachment").getDataSource().getInputStream();   
公共字符串进程(@Payload-String-Payload,@InboundAttachments(“*”)映射头)抛出IOException{
InputStream in=headers.get(“附件”).getDataSource().getInputStream();

2年后,对我来说也是一个救命恩人,感谢大家分享这一点知识!
<http:connector name="httpConnector" doc:name="HTTP\HTTPS">
        <service-overrides
            messageFactory="org.mule.transport.http.HttpMultipartMuleMessageFactory" />
    </http:connector>

<flow name="AttachmentTestFlow1" doc:name="AttachmentTestFlow1">        
    <http:inbound-endpoint connector-ref="httpConnector" doc:name="HTTP" exchange-pattern="request-response" host="localhost" port="8081"/>
    <component class="ProcessAttachment" doc:name="Java" />
</flow>
public String process(@Payload String payload, @InboundAttachments("*") Map<String, DataHandler> headers  ) throws IOException{     
    InputStream in  = headers.get("attachment").getDataSource().getInputStream();