如果您不想在服务器上启用 ftp,另一种选择是使用 RoboCopy 来保持服务器同步。使用这个工具我很幸运。您需要访问cfexecute
ColdFusion 标签,并且需要在您的服务器上创建共享。
RoboCopy 是 Windows 附带的可执行文件。您可以在此处和此处阅读一些文档。它有一些非常强大的功能,可以设置为将目录内容从一台服务器“镜像”到另一台服务器。在此模式下,它将保持文件夹相同(添加新文件、删除删除文件、复制更新文件等)。这就是我使用它的方式。
基本上,您将在目标服务器上创建一个共享并授予特定用户(可以是本地用户或域用户)的访问权限。在您的源服务器上,您将运行一些 ColdFusion 代码:
- 将驱动器逻辑映射到目标服务器
- 运行 RoboCopy 实用程序将文件复制到目标服务器
- 然后断开映射的驱动器
源服务器上的 ColdFusion 服务将需要访问C:\WINDOWS\system32\net.exe
和C:\WINDOWS\system32\robocopy.exe
. 如果您使用 ColdFusion 沙箱安全性,您将需要为这些可执行文件添加条目(仅在源服务器上)。下面是一些基本的代码示例。
首先,映射到目标服务器:
<cfexecute name="C:\WINDOWS\system32\net.exe"
arguments="use {share_name} {password} /user:{username}"
variable="shareLog"
timeout="30">
</cfexecute>
这里的 {share_name} 类似于\\server\c$
. {username} 和 {password} 应该很明显。您可以将用户名指定为\\server\username
. 注意 我建议使用您创建的共享而不是管理共享c$
,但这就是您在示例中所拥有的。
接下来,将文件从源服务器复制到目标服务器:
<cfexecute name="C:\WINDOWS\system32\robocopy.exe"
arguments="{source_folder} {destination_folder} [files_to_copy] [options]"
variable="robocopyLog"
timeout="60">
</cfexecute>
这里的 {source_folder} 类似于C:\folder1\folder2\folder3\folder4\folder5\
{destination_folder} 将是\\server\c$\folder1\folder2\folder3\folder4\folder5\
. 您必须以上述步骤中的 {share_name} 开头此参数,后跟所需的目录路径。[files_to_copy] 是文件列表或通配符 ( *.*
),[options] 是 RoboCopy 的选项。请参阅我包含的链接以获取完整的选项列表。它是广泛的。要镜像文件夹结构,请参见/E
和/PURGE
选项。我通常还包括/NDL
和/NP
选项来限制生成的输出。并/XA:SH
排除系统和隐藏文件。并且/XO
不打扰复制旧文件。您可以专门或使用通配符排除其他文件/目录。
然后,断开映射的驱动器:
<cfexecute name="C:\WINDOWS\system32\net.exe"
arguments="use {share_name} /d"
variable="shareLog"
timeout="30">
</cfexecute>
奇迹般有效。如果您走这条路并且之前没有使用过 RoboCopy,我强烈建议您先使用命令行来玩弄选项/功能。然后,一旦你让它按照你的喜好工作,只需将这些选项粘贴到上面的代码中。