Могу ли я отрицательно закрыть передачу файла SFTP со стороны клиента?

Я взаимодействую с SFTP-сервером, который удаляет файлы после их загрузки. Чтобы предотвратить потерю данных, мне нужно прочитать файл, поместить его в постоянное хранилище, а затем закрыть соединение, чтобы указать, что я его получил. Для меня не очевидно, что произойдет, если я не смогу безопасно сохранить файл. Есть ли способ закрыть соединение способом, который семантически указывает "Я закрываю соединение, и оно не удалось"? Все, что я нахожу в RFC, это сообщение SSH_FXP_CLOSE, которое, кажется, только сигнализирует об успешной передаче. Все другие типы сообщений об ошибках, по-видимому, используются только тогда, когда сервер возвращает ответ клиенту, а не наоборот.

1 ответ

Решение

Вы не можете сообщить об ошибке SFTP-серверу, это не то, для чего предназначен SFTP.

Для вашего конкретного случая просто закрытие SFTP-соединения без явного закрытия файла (без отправки SSH_FXP_CLOSE) может указывать серверу, что что-то пошло не так.

Хотя это действительно зависит от реализации вашего сервера, что он считает ошибкой. Документация SFTP-сервера должна содержать описание того, что вызывает удаление.

В SFTP нет ничего похожего на операцию загрузки (в отличие от FTP RETR команда). Есть только тривиальные файловые операции, такие как открытие файла (для чтения или записи), чтение части файла, закрытие файла. Так что это не так просто, как "сервер удаляет файл после его загрузки". Правило может сказать, например, "сервер удаляет файл после того, как он был закрыт после того, как был ранее открыт для чтения" или что-то в этом роде.

Другие вопросы по тегам