从 Azure 逻辑应用中的工作流连接到 FTP 服务器

适用范围:Azure 逻辑应用(消耗型 + 标准型)

本文介绍如何使用 文件传输协议 (FTP) 连接器从 Azure 逻辑应用中的工作流访问 FTP 服务器。 然后,可以创建由 FTP 服务器或其他系统中的事件触发后运行的自动化工作流,并运行操作来管理 FTP 服务器上的文件。

例如,工作流可以使用监视和响应 FTP 服务器上的事件的 FTP 触发器启动。 触发器使输出可用于工作流中的后续操作。 工作流可以使用以下特定任务运行 FTP 操作,以通过 FTP 服务器帐户创建、发送、接收和管理文件:

  • 添加或更改文件时进行监视。
  • 创建、复制、删除、列出和更新文件。
  • 获取文件元数据和内容。
  • 管理文件夹。

如果你不熟悉 Azure 逻辑应用,请查看以下入门文档:

连接器技术参考

FTP 连接器具有不同的版本,具体取决于逻辑应用类型和主机环境

逻辑应用类型(计划) 环境 连接器版本
消耗 多租户 Azure 逻辑应用 托管连接器(标准类)。 有关详细信息,请查看以下文档:

- FTP 托管连接器参考
- Azure 逻辑应用中的托管连接器
标准 单租户 Azure 逻辑应用和应用服务环境 v3(仅限 Windows 计划) 托管连接器(Azure 托管)和基于服务提供程序的内置连接器。 内置连接器可以使用连接字符串直接访问 Azure 虚拟网络。 有关详细信息,请查看以下文档:

- FTP 托管连接器参考
本文后面的 - FTP 内置连接器操作部分
- Azure 逻辑应用中的托管连接器
- Azure 逻辑应用中的内置连接器

注意

当我们使用 Office 365 Outlook 连接器登录 Office 365 Outlook中的 Office 365 Outlook 应用程序时, 必须使用由世纪互联运营的中国 Office 365 帐户登录。 此帐户的格式类似于 <your-account>@<your-organization>.partner.onmschina.cn。 组织管理员可以通过管理员站点管理用户。

限制

  • 容量和吞吐量

    • 适用于标准型工作流的内置连接器:

      默认情况下,FTP 操作可以读取或写入 200 MB 或更小的文件。 目前,FTP 内置连接器不支持区块。

    • 适用于消耗型和标准型工作流的托管连接器或 Azure 托管连接器

      默认情况下,FTP 操作可以读取或写入 50 MB 或更小的文件。 若要处理大于 50 MB 的文件,FTP 操作支持消息分块获取文件内容操作隐式使用分块。

  • 保留“上次修改”时间戳时,FTP 托管连接器或 Azure 托管连接器的触发器可能会遇到缺失、不完整或延迟结果。 另一方面,标准型逻辑应用工作流中的 FTP 内置连接器触发器没有此限制。 有关详细信息,请查看 FTP 连接器的限制部分。

  • FTP 托管连接器或 Azure 托管连接器可以创建有限数量的 FTP 服务器连接,具体取决于逻辑应用资源所在的 Azure 区域中的连接容量。 如果此限制在消耗型逻辑应用工作流中造成问题,请考虑创建标准型逻辑应用工作流并改用 FTP 内置连接器。

先决条件

  • Azure 帐户和订阅。 如果没有 Azure 订阅,请注册试用版 Azure 订阅

  • 要在其中访问 FTP 帐户的逻辑应用工作流。 若要使用 FTP 触发器启动工作流,必须从空白工作流开始。 若要使用 FTP 操作,请使用另一个触发器(例如“定期”触发器)启动工作流。

  • 有关同时适用于 FTP 托管连接器和内置连接器的更多要求,请查看 FTP 托管连接器参考 - 要求

已知问题

默认情况下,返回数组的触发器具有已启用的“拆分”设置。 启用此设置后,触发器会在内部创建单独的工作流实例以处理每个数组项,从而自动对数组解除批处理。 所有工作流实例都并行运行,以便同时处理数组项。

但是,启用“拆分”设置后,托管连接器触发器会以列表形式返回所有数组项的输出。 引用这些输出的任何后续操作必须首先将这些输出作为列表进行处理。 若要单独处理每个数组项,可以添加额外操作。 例如,若要循环访问这些数组项,可以使用 For each 循环。 对于仅返回元数据或属性的触发器,请先使用获取数组项元数据的操作,然后使用操作获取项内容。

必须仅对托管连接器触发器应用此方法,而不对内置连接器触发器应用,这些触发器在启用“拆分”设置后会逐个返回数组项的输出。

例如,假设你具有名为“添加或修改文件时(仅属性)”的托管连接器触发器,它以数组形式返回新文件或更新的文件的元数据或属性。 若要单独获取每个文件的元数据,可以使用循环访问数组 For each 循环。 在此循环中,按指定顺序使用以下托管连接器操作:

  1. “获取文件元数据”,用于获取每个文件的元数据。

  2. “获取文件内容”操作,用于获取每个文件的内容。

添加 FTP 触发器

消耗型逻辑应用工作流只能使用 FTP 托管连接器。 但是,标准型逻辑应用工作流可以使用 FTP 托管连接器和 FTP 内置连接器。 在标准型逻辑应用工作流中,托管连接器也标记为 Azure 连接器。

FTP 托管连接器和内置连接器各自只有一个触发器可用:

  • 托管连接器触发器:当在 FTP 服务器上的文件夹中添加或更改一个或多个文件时,名为“添加或修改文件时(仅属性)”的 FTP 触发器会运行消耗型或标准型逻辑应用工作流。 此触发器仅获取文件属性或元数据,而不获取文件内容。 但是,若要获取文件内容,工作流可以在此触发器后执行其他 FTP 操作。

    有关此触发器的详细信息,请查看添加或修改文件时(仅属性)

  • 内置连接器触发器:当在 FTP 服务器上的文件夹中添加或更改一个或多个文件时,名为“添加或更新文件时”的 FTP 触发器会运行标准型逻辑应用工作流。 此触发器仅获取文件属性或元数据,而不获取文件内容。 但是,若要获取内容,工作流可以在此触发器后执行其他 FTP 操作。 有关此触发器的详细信息,请查看添加或更新文件时

以下步骤使用 Azure 门户,但利用适当的 Azure 逻辑应用扩展,也可以使用以下工具来创建和编辑逻辑应用工作流:

  1. Azure 门户中,在设计器中打开空白逻辑应用工作流。

  2. 在设计器中的搜索框下选择“标准”。 在搜索框中输入“ftp”。

  3. 在触发器列表中,选择名为“添加或修改文件时(仅属性)”的触发器。

    Screenshot shows Azure portal, Consumption workflow designer, and FTP trigger selected.

  4. 提供连接信息。 完成操作后,选择“创建”。

    注意

    默认情况下,此连接器将以文本格式传输文件。 若要以二进制格式传输文件,例如,在使用了编码的情况下,请选择二进制传输选项。

    Screenshot shows Consumption workflow designer and FTP connection profile.

  5. 触发器信息框出现后,找到要监视是否有新文件或已编辑文件的文件夹。

    1. 在“文件夹”框中,选择文件夹图标以查看文件夹目录。

    2. 选择向右箭头 (>)。 浏览到所需文件夹,然后选择该文件夹。

    Screenshot shows Consumption workflow designer, FTP trigger, and

    所选文件夹将出现在“文件夹”框中。

    Screenshot shows Consumption workflow designer, FTP trigger, and

  6. 完成后,保存工作流。

保存工作流时,此步骤会自动将更新发布到 Azure 中实时部署的逻辑应用。 如果只使用触发器,工作流将仅根据指定的计划检查 FTP 服务器。 必须添加操作以响应触发器并对触发器输出执行某些操作。

添加 FTP 操作

消耗型逻辑应用工作流只能使用 FTP 托管连接器。 但是,标准型逻辑应用工作流可以使用 FTP 托管连接器和 FTP 内置连接器。 每个版本都有多个操作。 例如,托管连接器和内置连接器版本都有其自己的操作来获取文件元数据和获取文件内容。

  • 托管连接器操作:这些操作在消耗型或标准型逻辑应用工作流中运行。

  • 内置连接器操作:这些操作仅在标准型逻辑应用工作流中运行。

以下步骤使用 Azure 门户,但利用适当的 Azure 逻辑应用扩展,也可以使用以下工具来创建和编辑逻辑应用工作流:

使用 FTP 操作之前,工作流必须已使用触发器启动,该触发器可以是所选的任何类型。 例如,可以使用通用“定期”内置触发器按特定计划启动工作流。

  1. Azure 门户中,在设计器中打开逻辑应用工作流。

  2. 查找并选择要使用的 FTP 操作

    此示例继续执行名为“获取文件元数据”的操作,以便可以获取单个数组项的元数据。

    1. 在设计器上,在该触发器或任何其他操作下,选择“新建步骤”。

    2. 在“选择操作”搜索框中,选择“标准”。

    3. 在搜索框中,输入“ftp 获取文件元数据”。

    4. 在操作列表中,选择名为“获取文件元数据”的操作。

    Screenshot shows the Azure portal, Consumption workflow designer, search box with

  3. 如果需要,提供连接信息。 完成操作后,选择“创建”。

    注意

    默认情况下,此连接器将以文本格式传输文件。 若要以二进制格式传输文件,例如,在使用了编码的情况下,请选择二进制传输选项。

    Screenshot shows Consumption workflow designer and FTP connection profile for an action.

  4. 在“获取文件元数据”操作信息框出现后,在“文件”框中单击,以便打开动态内容列表。

    现在可以选择来自前面触发器的输出。

  5. 在动态内容列表中,在“添加或修改文件时”下,选择“文件 Id 列表”。

    Screenshot shows Consumption workflow designer,

    “文件”属性现在引用“文件 Id 列表”触发器输出。

  6. 在设计器上的“获取文件元数据”操作下,选择“新建步骤”。

  7. 在“选择操作”搜索框中,选择“标准”。

  8. 在搜索框中,输入“ftp 获取文件内容”。

  9. 在操作列表中,选择名为“获取文件内容”的操作。

    Screenshot shows the Azure portal, Consumption workflow designer, search box with

  10. 在“获取文件内容”操作信息框出现后,在“文件”框中单击,以便打开动态内容列表。

    现在可以选择来自前面触发器和任何其他操作的输出。

  11. 在动态内容列表中,在“获取文件元数据”下,选择“Id”,它引用已添加或更新的文件。

    Screenshot shows Consumption workflow designer,

    “文件”属性现在引用“Id”操作输出。

    Screenshot shows Consumption workflow designer,

  12. 完成后,保存工作流。 在设计器工具栏上选择“保存”。

测试工作流

若要检查工作流是否返回了所需的内容,请添加另一个操作,该操作会向你发送添加的或更新的文件内容。 此示例使用名为“发送电子邮件”的 Office 365 Outlook 操作。

  1. 在“获取文件内容”操作下,添加名为“发送电子邮件”的Office 365 Outlook 操作。 如果你有 Outlook.com 帐户,请添加 Outlook.com“发送电子邮件”操作,并相应地调整以下步骤。

    1. 在设计器上的“获取文件内容”操作下,选择“新建步骤”。

    2. 在“选择操作”搜索框中,选择“标准”。

    3. 在搜索框中,输入“office 365 outlook 发送电子邮件”。 在操作列表中,选择名为“发送电子邮件”的 Office 365 Outlook 操作。

    Screenshot shows Consumption workflow designer and

  2. 如果需要,登录电子邮件帐户。

  3. 在操作信息框中,提供所需值,并包含要测试的任何其他参数或属性。

    例如,可以包含来自“获取文件内容”操作的“文件内容”输出。 若要查找此输出,请执行以下步骤:

    1. 在“获取文件内容”操作中,在“正文”框内部单击,以便打开动态内容列表。

    2. 在动态内容列表中的“获取文件内容”旁,选择“查看更多”。

      Screenshot shows Consumption workflow designer,

    3. 在动态内容列表中的“获取文件内容”下,选择“文件内容”。

      “正文”属性现在引用“文件内容”操作输出。

      Screenshot shows Consumption workflow designer,

  4. 保存逻辑应用工作流。

  5. 若要运行和触发工作流,请在设计器工具栏上选择“运行触发器”>“运行”。 将文件添加到工作流监视的 FTP 文件夹中。

FTP 内置连接器操作

FTP 内置连接器仅适用于标准型逻辑应用工作流,可提供以下操作:

触发器 说明
添加或更新文件时 在 FTP 服务器上的指定文件夹中添加或更新文件时,启动逻辑应用工作流。

注意:此触发器仅获取文件元数据或属性,而不获取文件内容。 但是,若要获取内容,工作流可以在此触发器后执行“获取文件内容”操作。

操作 说明
创建文件 使用指定文件路径和文件内容创建文件。
删除文件 使用指定文件路径删除文件。
获取文件内容 使用指定文件路径获取文件的内容。
获取文件元数据 使用指定文件路径获取文件的元数据或属性。
列出文件夹中的文件和子文件夹 获取指定文件夹中的文件和子文件夹的列表。
更新文件 使用指定文件路径和文件内容更新文件。

添加或更新文件时

操作 ID:whenFtpFilesAreAddedOrModified

在 FTP 服务器上的指定文件夹中添加或更新文件时,此触发器会启动逻辑应用工作流运行。 此触发器仅获取文件元数据或属性,而不获取任何文件内容。 但是,若要获取内容,工作流可以在此触发器后执行“获取文件内容”操作。

参数

名称 需要 Type 说明
文件夹路径 folderPath 正确 string 文件夹路径(相对于根目录)。
要返回的文件数 maxFileCount False integer 从单个触发器运行返回的最大文件数。 有效值的范围为 1 - 100。

注意:默认情况下,“拆分”设置处于启用状态,会强制此触发器并行单独处理每个文件。
用于忽略旧文件的截止时间戳 oldFileCutOffTimestamp False dateTime 用于忽略旧文件的截止时间。 选择时间戳格式 YYYY-MM-DDTHH:MM:SS。 若要禁用此功能,请将此属性留空。

返回

启用触发器的“拆分”设置后,触发器会逐个返回文件的元数据或属性。 否则,触发器会返回包含每个文件的元数据的数组。

名称 类型
文件列表 BlobMetadata

创建文件

操作 ID:createFile

此操作使用指定文件路径和文件内容创建文件。 如果文件已存在,则此操作会覆盖该文件。

重要

如果在相同工作流中进行创建后立即删除或重命名 FTP 服务器上的文件,则该操作可能会返回 HTTP 404 错误(这符合设计)。 若要避免此问题,请在删除或重命名任何新创建的文件之前包含 1 分钟的延迟。 可以使用“延迟”操作将此延迟添加到工作流。

参数

名称 需要 Type 说明
文件路径 filePath True string 相对于根目录的文件路径,包含文件扩展名(如果有)。
文件内容 fileContent True string 文件内容。

返回

此操作返回名为 Body 的 BlobMetadata 对象。

名称 类型
文件元数据文件名 string
文件元数据文件路径 string
文件元数据文件大小 string
文件元数据 BlobMetadata

删除文件

操作 ID:deleteFtpFile

此操作使用指定文件路径删除文件。

参数

名称 需要 Type 说明
文件路径 filePath True string 相对于根目录的文件路径,包含文件扩展名(如果有)。

返回

获取文件内容

操作 ID:getFtpFileContent

此操作使用指定文件路径获取文件的内容。

参数

名称 需要 Type 说明
文件路径 path True string 相对于根目录的文件路径,包含文件扩展名(如果有)。

返回

此操作将文件的内容作为名为“文件内容”的二进制值返回。

名称 类型
文件内容 二进制

获取文件元数据

操作 ID:getFileMetadata

此操作使用指定文件路径获取文件的元数据或属性。

参数

名称 需要 Type 说明
文件路径 path True string 相对于根目录的文件路径,包含文件扩展名(如果有)。

返回

此操作返回以下输出:

名称 类型
文件名 string
文件路径 string
文件大小 string
上次更新时间 string
文件元数据 BlobMetadata

列出文件夹中的文件和子文件夹

操作 ID:listFilesInFolder

此操作获取指定文件夹中的文件和子文件夹的列表。

参数

名称 需要 Type 说明
文件夹路径 folderPath 正确 string 文件夹路径(相对于根目录)。
文件内容 fileContent True string 文件的内容

返回

此操作返回名为 Response 且包含 BlobMetadata 对象的数组。

名称 类型
响应 包含 BlobMetadata 对象的数组

更新文件

操作 ID:updateFile

此操作使用指定文件路径和文件内容更新文件。

重要

如果在相同工作流中进行创建后立即删除或重命名 FTP 服务器上的文件,则该操作可能会返回 HTTP 404 错误(这符合设计)。 若要避免此问题,请在删除或重命名任何新创建的文件之前包含 1 分钟的延迟。 可以使用“延迟”操作将此延迟添加到工作流。

参数

名称 需要 Type 说明
文件路径 filePath True string 相对于根目录的文件路径,包含文件扩展名(如果有)。
文件内容 fileContent True string 文件的内容

返回

此操作返回名为 Body 的 BlobMetadata 对象。

名称 类型
正文 BlobMetadata

后续步骤