上传到 SFTP 时保留文件的修改时间戳

Preserving modified timestamp of file while uploading to SFTP

我需要在将文件上传到 SFTP 站点时保留修改后的时间戳。

我正在使用 com.enterprisedt.net.ftp.ssh.SSHFTPclient 进行转账。

有什么办法请告诉我。

上传后调用SSHFTPClient.setModTime

sshFtpClient.setModTime(remotePath, new Date(new File(localPath).lastModified());

Let me know if there is any way.

传输文件时无法保留时间戳。 SFTP协议不允许。

SFTP 有线协议规范文档从未完成和批准,但大多数草案(协议版本 6)是 draft-ietf-secsh-filexfer-13

如果你查看第 8.1 和 8.2 节,你会看到客户端请求打开文件 (SSH_FXP_OPEN) 和写入文件 (SSH_FXP_WRITE) 不传递任何时间戳从客户端到服务器的信息。由于请求未传递时间戳,因此无法在传输中保留它们。

如果要“保留”时间戳,协议文档说客户端需要发送SSH_FXP_SETSTATSSH_FXP_FSETSTAT请求来更新相关文件属性。

有使用 SSHFTPClient 库执行此操作的代码。

我没有检查过,但我相信这也适用于早期版本的 SFTP 协议。