【问题标题】:Send file to Mule inbound-endpoint将文件发送到 Mule 入站端点
【发布时间】:2013-03-27 09:58:13
【问题描述】:

我正在尝试将带有文件和两个输入的表单发送到 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>

在 MyfileUploadProcessor 类中:

公共类 MyfileUploadProcessor 实现 MessageProcessor {

    @Override
    public MuleEvent process(MuleEvent event) throws MuleException {
        // TODO Auto-generated method stub
        String response = "success";

        MuleMessage mulemessage = event.getMessage();

        String countryCode = mulemessage.getInboundProperty("username");
        String sourceCode = mulemessage.getInboundProperty("password");
        InputStream input = (InputStream) mulemessage.getPayload();

...

为了测试,一个简单的html:

<form action="http://tango.privada.informa:11002/services/fileupload" method="post"
enctype="multipart/form-data">
   <p>Country Code :<input type="text" name="username" /></p>
   <p>Source Code :<input type="text" name="password" /></p>
   <p>File :<input type="file" name="payload" /></p>
   <p><input type="submit" name="submit" value="submit" />
<input type="reset" name="reset" value="reset"></p>
</form>

</body>
</html>

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

提前致谢

【问题讨论】:

    标签: file-upload mule endpoint


    【解决方案1】:

    您需要将 HTTP 连接器配置为使用 org.mule.transport.http.HttpMultipartMuleMessageFactory 以处理 multipart/form-data HTTP POST。

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

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

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

    【讨论】:

      【解决方案2】:

      大卫的好回答(我的救命稻草!!感谢大卫) 对于一些我起初没有意识到的额外项目的价值,必须将 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 添加两个附件上传,第一个

      • 有一个参数名称 = "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();   
      

      【讨论】:

      • 即使在 2 年后也是我的救星,感谢大家分享这些知识!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 2014-01-26
      • 2013-02-22
      • 1970-01-01
      相关资源
      最近更新 更多