使用sftp-ssh通过Logic应用程序将1Gb文件上传到Azure文件共享

时间:2019-12-30 05:51:13

标签: azure azure-logic-apps azure-files

我正在使用Logic App如下上传1 Gb文件- 触发器-添加或修改文件时(仅属性) 动作1-获取文件内容 行动2-创建文件(Azure文件共享) 直到35 MB,所有触发器和动作都可以正常工作。在SFTP中上传的文件超过40 MB后,SFTP-SSH触发和操作都可以正常工作。但是,当工作流移至第二个动作-“创建文件”时,它失败并显示以下错误:SMB客户端可能正在使用指定的资源”。当我看到Azure文件共享存储帐户时,我看到正在创建filename.partial.lock。我也修改了访问策略,但问题仍然存在。

enter image description here

5 个答案:

答案 0 :(得分:1)

Logic应用程序并非旨在从源/目标上传或下载大量数据,而是一种工作流解决方案,您可以将其设计为提供业务所需的解决方案,但是您仍然可以在Logic-App中使用块上传功能来进行上传或通过逻辑应用下载大文件。 请参考 https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-handle-large-messages#set-up-chunking

答案 1 :(得分:1)

要上传大文件,请确保启用Allow chunking

根据您的描述,假设它应该为SharingViolation,则可以检查error codes here

在官方文档中,有两种情况会出现“共享冲突”错误:

由于文件访问而导致违反共享行为

  • 客户端A使用FileAccess.Write和FileShare.Read打开文件 (拒绝随后的写/删除同时打开)。
  • 客户端B然后使用FileAccess打开文件。 FileShare.Write(打开时拒绝后续的读取/删除)。
  • 结果:由于客户端B指定了a,因此遇到共享冲突 文件访问被先前指定的共享模式拒绝 客户A。

由于共享模式而违反共享行为

  • 客户端A使用FileAccess.Write和FileShare.Write打开文件 (拒绝随后在打开时读取/删除)。

  • 客户端B然后使用FileAccess打开文件。 FileShare.Read(打开时拒绝随后的写入/删除)。

  • 结果:由于客户端B指定了a,因此遇到共享冲突 共享模式拒绝对仍然打开的文件进行写访问 写入权限。

这些是您需要考虑的场景,您可以尝试使用REST API上载文件的另一种选择,并在HTTP操作中设置Allow chunking

答案 2 :(得分:0)

我认为解决该问题的另一种方法是重新设计,这可能是更可扩展的解决方案:

  1. 如果在SFTP / FTP位置添加或修改了文件,请使用逻辑应用程序来获取通知。 添加文件后,请读取该文件的文件路径。
  2. 创建服务总线消息并将文件“服务总线消息路径”作为消息内容发送。
  3. 创建服务总线队列消息触发Azure功能,以监听那些消息(在步骤2中创建) Azure函数将使用文件路径从SFTP读取文件块。

这样,您可以读取或写入超过30 GB的文件。 该解决方案将具有更强的可缩放性,因为它具有天蓝色功能和按需自动缩放功能。

答案 3 :(得分:0)

谢谢大家。错误消息“ SMB客户端可能正在使用指定的资源”的原因是由于在两个Linux虚拟机上装入了文件共享。我们卸载了Linux VM,并进行了全新的单次安装。错误已解决。

答案 4 :(得分:0)

MSFT在我们的讨论中确认“创建文件共享”的限制为100或300 MB。当数据分块到达时,它只能与SFTP一起使用。当文件大小超过100或300 MB时,MSFT会进一步努力给出正确的错误声明。以下引自MSFT电子邮件- “感谢您提供详细信息,实际上产品团队向我确认您的流程很幸运,它不应使用这种大小,因为他们正在努力正确实施限制以防止文件大于最大大小(可能是300或100) “我不确定” 而且,仅当我们从被SFTP读取的内容中读取内容时,这种奇怪的行为才会发生。 “