当前位置: 首页 > 知识库问答 >
问题:

如何使用curl从命令行界面(CLI)调用Mule的文件入站endpoint?

邢曦
2023-03-14

我试图将多个文件从源移动/上传到目的地(可以是任何东西,例如FTP或文件出站等..)通过使用下面的流程

<flow name="flow1" doc:name="f1">
            <file:inbound-endpoint path="C:\input" responseTimeout="10000" doc:name="File"/>
    </flow>

<flow name="flow2" doc:name="f2">
  <http:inbound-endpoint address="http://localhost:8080" doc:name="HTTP" exchange-pattern="request-response"/>

  <flow-ref name="flow1" doc:name="Flow Reference"/>
        <file:outbound-endpoint path="C:\outputfile" responseTimeout="10000" doc:name="File"/>

</flow>

这样做的原因是我想使用CURL从CLI(命令行界面)调用作业。

但我收到以下错误:

错误:

请帮帮忙

共有2个答案

顾永福
2023-03-14

文件endpoint是基于资源的endpoint(如ftp和s ftpendpoint),而不是基于事件的endpoint(如jms和vm)或基于tcp的endpoint(如tcp、http、udp等)

因此,您正在实施的方法不适合您的用例。如果需要按需加载文件(即,当您命中 http endpoint时),则应重构流程并使用 mule 模块-文件-utils。此模块需要添加为专家依赖项或安装在 Studio 中。您可以通过克隆git存储库来执行此操作,然后您可以按照这些说明安装生成的更新站点zip文件

完成此操作后,您的流将如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:fileutils="http://www.mulesoft.org/schema/mule/fileutils" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:file="http://www.mulesoft.org/schema/mule/file"
    xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.mulesoft.org/schema/mule/fileutils http://www.mulesoft.org/schema/mule/fileutils/3.3/mule-fileutils.xsd 
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd 
http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd 
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd ">
    <fileutils:config name="Fileutils" doc:name="Fileutils"/>
    <flow name="FileCopier" doc:name="FileCopier">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="copy-file" doc:name="HTTP"/>
        <scripting:transformer doc:name="Script">
            <scripting:script engine="Groovy">
                <scripting:text><![CDATA[def dir = new File("/" + message.getInboundProperty('http.relative.path'))
log.info(dir.getPath())
return Arrays.asList(dir.listFiles())]]></scripting:text>
            </scripting:script>
        </scripting:transformer>
        <logger level="INFO" doc:name="Logger"/>
        <set-variable variableName="fileNumber" value="#[payload.size()]" doc:name="Variable"/>
        <foreach doc:name="Foreach">
            <fileutils:copy-file config-ref="Fileutils" destinationName="#[message.payload.getName()]" destinationPath="/tmp/out/" fileName="#[message.payload.getName()]" filePath="#[message.payload.getParentFile().getPath()]" fileAge="0" doc:name="Fileutils"/>
        </foreach>
        <set-payload value="#[flowVars['fileNumber'] + ' file copied']" doc:name="Set Payload"/>
        <http:response-builder status="200" contentType="text/plain" doc:name="HTTP Response Builder"/>
        </flow>
      </mule>

如果您不想使用fileutils模块,您可以将其替换为实现文件复制逻辑的脚本组件

现在可以使用下面的curl命令调用这个流

Curl超文本传输协议://${主机名}: 8081/拷贝文件/${path_to_directory_to_copy}

有关curl的文档可在此处获取

糜运良
2023-03-14

试试这个

<flow name="flow1" doc:name="flow1" initialState="stopped">
  <file:inbound-endpoint path="C:\Input" responseTimeout="10000" doc:name="File"/>

  <file:outbound-endpoint path="C:\outputfile" responseTimeout="10000" doc:name="File"/>
</flow>

<flow name="flow2" doc:name="flow2">
  <http:inbound-endpoint address="http://localhost:8080/start" doc:name="HTTP" exchange-pattern="request-response"/>

  <expression-component>
    app.registry.filePickupFlow.start();
  </expression-component>

  <set-payload value="File successfully copied" />

</flow>
 类似资料:
  • CLI 是为了转换你的工作思维,你以前习惯了在图形界面下工作,你现在应该开始习惯在命令行界面下工作。没什么理论知识,上来就跟着动手练。

  • 本文介绍如何使用 命令行界面(CLI)创建应用程序,并将它们部署到各种原生移动平台。这个工具允许你创建新的项目,在不同的平台构建,并运行在实际设备或仿真器中。 CLI 是用于在概述中描述的跨平台的工作流的主要工具。当然,你也可以使用 CLI 来初始化项目代码,然后切换到不同的平台的SDK和 shell 工具作为后续发展。 前提 使用 CLI 前,需安装目标平台的 SDK 。(详见平台开发指南) C

  • 当我在终端中点击curl代码时,我得到了200,所以我假设我编写testStytch的方式到目前为止还可以。但是,一旦我试图集成到java文件中,我就会收到错误的请求响应。我现在有点不知所措。https://github.com/libetl/curl这就是我所说的转换curl代码。 这是我得到的错误。https响应代理{HTTP/1.1 400错误请求[日期:星期四,2021 23:21:424

  • 问题内容: 我必须将一些常规代码发送给仅安装了Java的某些用户(没有常规,没有$ groovy_home等)。我正在尝试从命令行调用Groovy,但是我没有运气。这是我的蝙蝠文件: 这是我的例外: 有人有线索吗?我在\ lib目录中有’groovy-all-1.6-beta-1.jar’。 问题答案: 我认为您需要在类路径中明确列出groovy jar

  • 我不熟悉Curl和Cacerts的世界,在连接到服务器时遇到了一个问题。基本上,我需要测试从一台机器到另一台机器的https连接。我有一个URL,我需要从机器a(linux机器)连接到它。我在命令提示符下尝试了这个方法 并得到以下结果: 在浏览互联网上的一些文章时,我这样做了: 并得到了一些响应,包括服务器证书(在)。 接下来我该怎么办。我想,我只需将文本复制粘贴到

  • 在“Command Line”选项卡,您只需将命令填入到gradle输入框. 就可以直接执行单个的Gradle命令. 或者说在您将某个命令添加到收藏夹之前,您想看看是什么效果的话,不妨来这里试试.