Я ищу информацию о команде APPE FTP, что на самом деле она делает, но большинство сайтов только добавляют. Затем я пробую команду, чтобы убедиться, что она ведет себя так, как ожидалось.
Я разрабатываю автодатчик FTP, который используется для отправки файла журнала с компьютера на сервер для создания отчетов. Я хочу отправить только последнюю строку файла журнала.
При использовании команды APPE она фактически добавляет содержимое всего файла и добавляет к существующему на сервере. Это приведет к дублированию записи строки.
Ответ:
Чтобы возобновить файл, если последняя передача не удалась, такой команды для этого не существует, но нам нужно использовать последовательность команд для ее достижения.
Ключевым моментом здесь является поиск вашего локального файла до последнего загруженного байта, если вы используете команду APPE или команду REST. REST начнет передачу с этой конкретной позиции байта. Я в конечном итоге с этим решением выполнить после установления соединения:
Использовать APPE (я понял из журнала FileZilla):
- Используйте SIZE, чтобы проверить, существует ли файл, и используйте его как маркер возобновления.
- Открыть локальную файловую систему и искать по маркеру.
- Используйте APPE для загрузки, и FTP-сервер добавит его автоматически.
Использовать STOR с REST (идея пришла из edtFTPnet):
- Используйте SIZE, чтобы проверить, существует ли файл, и используйте его как маркер возобновления.
- Отправьте REST с результатом, который вы получите от SIZE, чтобы сообщить FTP-серверу, чтобы начать запись в позиции.
- Откройте локальную файловую систему и ищите по маркеру.
- Используйте STOR как обычную загрузку.
Обратите внимание, что не все серверы FTP поддерживают оба способа. Я вижу, FileZilla переключает это в двух направлениях, в зависимости от сервера. Мои наблюдения показывают, что использование REST является стандартным способом. Загрузка также может использовать REST для начала загрузки с заданной позиции байта.
Помните, что использование поддержки возобновления для типа передачи ASCII приведет к неожиданному результату, поскольку Unix и Windows имеют разное количество байтов разрыва строки.
Попробуйте манипулировать FileZilla, чтобы увидеть поведение в журнале.
Вы также можете проверить этот полезный FTP с открытым исходным кодом для библиотеки .NET, как они это делают
edtFTPnet