Отличный вопрос, вы имеете дело с 2 транзакциями здесь. Первая транзакция помещает файл в папку на вашем веб-сервере. Это использует HTTP в качестве транспорта через метод POST (также, вероятно, самая медленная часть этой транзакции).
Как только начальная загрузка на стороне клиента будет завершена, файл будет сохранен на вашем веб-сервере, где теперь можно передавать сценарий S / FTP.
Чтение комментария ниже того, что вы хотели, было передать файл по FTP со стороны клиента, и это вполне жизнеспособное решение. Однако это текущий процесс, который вы реализовали.
Ваш процесс в настоящее время.
- Пользователь A загружает файл через HTTP с помощью веб-страницы, которую вы размещаете.
- Пользователь A ждет завершения загрузки файла, прежде чем закрывать свой браузер.
- Файл сохраняется в каталоге, указанном в сценарии загрузки.
- Сценарий S / FTP считывает файл и устанавливает соединение с внешним сервером S / FTP и начинает передачу файла на этот сервер.
Если шаг 4 является избыточным, то сценарий S / FTP вообще не требуется, если только вы не хотели передавать с клиента через S / FTP.
Ваше намерение.
- Пользователь A загружает файл через S / FTP с помощью браузера S / FTP-клиента.
- Пользователь A ожидает завершения загрузки файла.
- Файл сохраняется в каталоге, указанном в сценарии загрузки.
В комментариях вы упомянули о возможной реализации решения Flex. Вот некоторые ресурсы, которые я нашел, которые могут помочь.
Клиент на базе Flex FTP
Вопрос клиента FTP на основе Flex в стеке Exchange
Реализация клиента S / FTP на стороне сервера с PHPSecLib.
SFTP.php в Gist (для номеров строк и выделения)
Оригинальный PHPSec SFTP.php
Я скопировал оригинал через сайт Sourceforge в Gist, чтобы вы могли использовать номера строк в качестве руководства. Библиотека SFTP ожидает либо полный путь к файлу (т.е. / tmp / somefilehere), либо допустимый ресурс PHP файла . Как и в случае, возвращаемом fopen $fp = @fopen('/tmp/somefilehere', 'rb');
, см. Пример строки 1132 в gist.
После аутентификации передача будет довольно быстрой по сравнению с начальной загрузкой. Ваш сервер, скорее всего, находится в центре обработки данных с гораздо большей пропускной способностью, поэтому передача файлов происходит намного быстрее.
Возможно, вы хотите инициировать транзакцию S / FTP через ваш веб-браузер. Это возможно только с обычными языками сценариев, такими как PHP / Python или Ruby. Вы можете использовать S / FTP из браузера с помощью Flash, Flex или Java, а также, возможно, с некоторыми технологиями Windows.