【问题标题】:downloading multiple files to multiple folder using ssis from sftp使用 ssis 从 sftp 将多个文件下载到多个文件夹
【发布时间】:2017-05-31 17:39:15
【问题描述】:

我正在尝试使用 SSIS 中的 FTP 任务和脚本任务将位于 FTP 站点的多个文件夹中的多个文件下载到特定驱动器上的多个文件夹中。我没有将文件下载到一个特定的文件夹中。我到处寻找,我找不到任何好的信息。任何帮助深表感谢。谢谢。

【问题讨论】:

  • 文件和文件夹之间的链接是什么?他们共享一些命名部分吗?或者目标文件夹是否与每个文件的源文件夹同名?需要更多信息。
  • 文件夹和文件共享相同的前缀。例如,abc_20170531.txt 将进入 abc 文件夹。我试过使用源路径参数,但它只适用于一个特定的前缀。谢谢
  • Tab Alleman,我将拥有 30 多个文件夹,所以我想看看在为每个文件夹创建 30 个 foreach 循环之前是否有更有效的下载方法。感谢您的帮助。
  • @Hmen 您是否从源 FTP 获取所有文件夹中的所有文件?意思是.. 是否有一个伞形文件夹包含您要从中抓取的所有子文件夹,并且您可以在没有过滤器的情况下抓取该伞形文件夹下的所有内容?

标签: c# ssis ftp script-task


【解决方案1】:

如果由于某种原因您不需要使用脚本任务,那么您需要执行以下操作:

  1. 创建一个 Foreach 循环容器
  2. Collection 选项卡下的Folder 字段下,浏览到包含您从源FTP 拉取文件的所有子文件夹的文件夹。 (这是假设存在这样一个文件夹,希望它确实存在,或者您可以创建一个)
  3. 选中Traverse Subfolders 框,然后选择Fully Qualified
  4. Variable Mappings 选项卡下,创建一个变量@FileNameWithPath 或任何您想命名的变量。索引默认值很好。
  5. 创建一个名为FileName的包变量
  6. FileName 的表达式设置为此,将删除路径:

RIGHT(@[User::FileNameWithPath], FINDSTRING(REVERSE(@[User::FileNameWithPath]), "\\", 1 )-1)

  1. 创建一个名为FilePrefix的包变量
  2. 创建一个表达式以从FileName 中提取前缀。如果你在第一个下划线之前抓住一切,那就是这样:

LEFT( @[User::FileName],FINDSTRING(((DT_WSTR, 150) @[User::FileName] ), "_", 1)-1)

  1. 创建另一个名为DestinationFolder 的变量。
  2. 使用您刚刚创建的FilePrefix 变量来构建DestinationFolder 的表达式。会是这样的:

"\\Your destination FTP\" + @[User::FilePrefix]

  1. 在您的 Foreach 循环容器中,添加 File System Task
  2. File System Task 设置为移动或复制,无论您需要什么,使用FileNameWithPathSource VariableDestinationFolder 的目标变量

【讨论】:

  • 感谢您提供的信息,但有没有办法让 foreach 循环连接到 FTP 服务器?你如何使 foreach 循环连接到 FTP 远程路径?我不知道这是可能的。谢谢!
  • 当然可以,很乐意为您提供帮助 - 要连接到 FTP 服务器,您只需将完整路径放入上述第 2 步即可。如果需要特殊凭据,您可能还需要将 FTP 映射为运行 SSIS 的服务器上的网络驱动器。 @Hmen
  • 谢谢!我会尝试将其映射为下一个工作驱动器,如果有任何问题,我会回复您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多