4

Если бы я должен был загрузить большой файл на FTP-сервер, появляется ли этот файл немедленно в файловой системе назначения и может ли он быть доступен другой стороне до завершения передачи?

Если да, то какие существуют способы предотвращения чтения файла до завершения передачи?

3 ответа3

3

Это будет полностью зависеть от вашего конкретного поведения реализации сервера и не полностью определено в RFC959.

В общем, файл недоступен на сервере, пока его загрузка не вернула 226, а его статус равен 150. Если файл еще не был полностью загружен, его ответ о статусе не будет 550, и он не будет передавать файл клиенту.

Чтобы сделать это, глагол STOU будет знать, что загрузка файла завершена, когда прибывает байт EOF, поэтому в этот момент весь файл был загружен, поэтому он возвращает 226.

Глагол RECV сначала возвращает статус запрошенного файла. ожидается ответ 150, если файл находится в приемлемом состоянии, и затем начнется передача.

Кроме того, помните, что большинство серверных служб реализованы в виде многопоточных приложений, и безопасность потоков для файлов обычно зависит от блокировки файловой системы и ОС сервера для файлов. На большинстве платформ, когда файл активно записывается, другие потоки не могут ни читать, ни записывать в этот файл, пока не будет снята блокировка.

2

Теоретически FTP-сервер может заблокировать загруженный файл от доступа других процессов или других FTP-соединений.

На практике это не происходит на * nix серверах. Я проверял это на CentOS с PureFTPD и ProFTPD (наиболее широко используемые * nix FTP-серверы). С обоими серверами ничто не мешает вам загрузить неполный файл.

С другой стороны, FTP-сервер Windows IIS блокирует загруженный файл. Протестировано на IIS 6.2 (Windows 8.1).

Обходной путь см. В моем ответе на FileZilla.

2

Если ваш FTP-сервер поддерживает функцию, аналогичную скрытым хранилищам ProFTPD, вы можете попробовать это.

Директива HiddenStores разрешает двухэтапную загрузку файлов: файлы загружаются как «.in.filename». и после завершения загрузки переименовывается в просто "имя файла". Это обеспечивает некоторую степень атомарности и помогает предотвратить 1) неполную загрузку и 2) файлы, используемые в процессе загрузки.

Источник: http://www.proftpd.org/docs/directives/linked/config_ref_HiddenStores.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .