好问题,您在这里处理 2 笔交易。第一个事务将文件放入 Web 服务器上的某个位置。这通过 POST 方法使用 HTTP 作为传输(也可能是此事务中最慢的部分)。
初始客户端上传完成后,文件将存储在您的 Web 服务器上,现在可以在其中传输 S/FTP 脚本。
阅读下面的评论,您想要的是使用 FTP 从客户端传输文件,这是一个完全可行的解决方案。但是,这是您实施的当前流程。
您当前的流程。
- 用户 A 使用您托管的网页通过 HTTP 上传文件。
- 用户 A 等到文件上传完成后才关闭他的浏览器。
- 文件保存在上传脚本中指定的目录路径中。
- S/FTP 脚本读取文件并启动与外部 S/FTP 服务器的连接并开始将文件传输到该服务器。
如果步骤 4 是多余的,则根本不需要 S/FTP 脚本,除非您想要通过 S/FTP 从客户端传输。
你的意图。
- 用户 A 使用基于浏览器的 S/FTP 客户端通过 S/FTP 上传文件。
- 用户 A 等待文件上传完成。
- 文件保存在上传脚本中指定的目录路径中。
在您提到的可能实施 Flex 解决方案的评论中。以下是我发现的一些可能有帮助的资源。
基于 Flex FTP 的客户端
Stack Exchange 上基于 Flex 的 FTP 客户端问题
使用 PHPSecLib在服务器端实现 S/FTP 客户端。
Gist 上的 SFTP.php(用于行号和突出显示)
原始 PHPSec SFTP.php
我通过 Sourceforge 站点将原件复制到 Gist,以便您可以使用行号作为指南。SFTP 库需要文件的完整路径(即 /tmp/somefilehere)或有效的PHP 文件资源。就像fopen $fp = @fopen('/tmp/somefilehere', 'rb');
返回的一样,请参阅 gist 上的第 1132 行作为示例。
一旦通过身份验证,与初始上传相比,传输将非常快。您的服务器可能位于带宽更多的数据中心,因此文件传输速度更快。
您可能希望通过 Web 浏览器启动 S/FTP 事务。它可能只是不使用传统的脚本语言,如 PHP / Python 或 Ruby。您可以使用 Flash、Flex 或 Java 以及一些 Windows 技术从浏览器中进行 S/FTP。