如何从数据库中读取文件名列表并将它们上传到 ftp 站点

How to read list of file names from DB and upload them to a ftp site

我需要一个计划作业来从数据库中读取文件名列表,然后他们将它们上传到 ftp 站点。我如何在 WSO2 ESB 中做到这一点?

谢谢

更新 (7/19/16):根据给出的建议,我编写了一个存储过程,以 return 所有文件名以 xml 格式。现在我需要弄清楚如何解析这个 xml 格式的结果,它们可以 ftp 使用 fileconnector。请让我知道我的方法是否可行。非常感谢您的帮助。

<proxy name="FileUpload2CDGPS" startOnLoad="true" trace="disable" transports="https http" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <sequence key="FileLookupSeq"/>
            <sequence key="SendFile2VendorSeq"/>
            <send/>
        </inSequence>
        <outSequence/>
        <faultSequence>
            <drop/>
        </faultSequence>
    </target>
</proxy>

<sequence name="FileLookupSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
  <log description="LogMessage" level="custom">
    <property name="message" value="Find CDR files to upload"/>
  </log>
  <dblookup description="Get CDR files to be upload">
    <connection>
      <pool>
        <password>***</password>
        <driver>org.postgresql.Driver</driver>
        <url>jdbc:postgresql://localhost:5432/esbcdrdb</url>
        <user>***</user>
      </pool>
    </connection>
    <statement>
      <sql><![CDATA[SELECT * FROM find_cdr_file_to_upload(1)]]></sql>
      <result name="xml_file" column="find_cdr_file_to_upload"/>
    </statement>
  </dblookup>
</sequence>

<sequence name="SendFile2VendorSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
  <iterate attachPath="//files/files-set" description=""
    expression="//files/files-set/file" preservePayload="true">
    <target>
      <sequence>
        <property description="fileName"
          expression="//files/files-set/file/name" name="fileName"
          scope="default" type="STRING"/>
        <property description="fileId"
          expression="//files/files-set/file/id" name="fileId"
          scope="default" type="STRING"/>
        <property description="fileSource"
          expression="//files/files-set/file/path" name="fileSource"
          scope="default" type="STRING"/>
        <property description="vendorId"
          expression="//files/files-set/file/vendor-id" name="vendorId"
          scope="default" type="STRING"/>
        <property description="vendorDest"
          expression="//files/files-set/file/vendor-dest"
          name="vendorDest" scope="default" type="STRING"/>
        <fileconnector.copy>
          <source>{$ctx:fileSource}</source>
          <destination>{$ctx:vendorDest}</destination>
          <filePattern>{$ctx:fileName}</filePattern>
        </fileconnector.copy>
      </sequence>
    </target>
  </iterate>
</sequence>

您可以通过多种方式完成此操作。

  • 您可以直接在计划任务中编写您的要求,它处理数据库连接并将文件上传到 ftp 站点。 如何write a schedule task
  • 或者您可以通过在代理内部执行的计划任务sample can be found here. And inside the proxy you can connect to the db and get the required data and upload it to ftp using vfs, or you can write a custom mediator调用代理。