我可以从客户端消极地关闭 SFTP 文件传输吗?

Can I negatively close a SFTP file transfer from the client side?

我正在与一个 SFTP 服务器进行交互,该服务器会在文件下载后将其删除。为防止数据丢失,我需要读取文件,将其放入持久存储,然后关闭连接以表明我已收到它。对我来说不明显的是如果我不能安全地存储文件会发生什么。有没有办法以语义上指示“我正在关闭连接但它失败了”的方式关闭连接?我在 RFC 中找到的只是一条 SSH_FXP_CLOSE 消息,它似乎只表示传输成功。所有其他错误消息类型似乎仅在服务器 returns 响应客户端时使用,而不是相反。

您不能向 SFTP 服务器发送错误信号,这不是 SFTP 的目的。

对于您的特定情况,仅关闭 SFTP 连接而不显式关闭文件(不发送 SSH_FXP_CLOSE)可能会向服务器指示出现问题。

虽然这实际上取决于您的服务器实现,但它认为什么是错误。 SFTP 服务器的文档应该描述触发删除的是什么。

在 SFTP 中没有像 "download" 操作那样的东西(与 FTP RETR 命令相反)。只有琐碎的文件操作,如打开文件(用于读取或写入)、读取文件的一部分、关闭文件。所以并不像"server deletes the file after it is downloaded"那么简单。该规则可以说例如 "server deletes the file after it is closed after being previously opened for reading" 或类似的东西。