在将文件上传到 SFTP 站点时,我需要保留文件的修改时间戳。
我正在使用 com.enterprisedt.net.ftp.ssh.SSHFTPclient 进行传输。
请让我知道是否有任何方法。
让我知道是否有任何方法。
传输文件时无法保留时间戳。SFTP 协议不允许这样做。
SFTP 有线协议规范文档从未完成和批准,但最草案(对于协议的版本 6)是draft-ietf-secsh-filexfer-13。
如果您查看第 8.1 节和第 8.2 节,您将看到客户端打开文件 ( SSH_FXP_OPEN
) 和写入文件 ( SSH_FXP_WRITE
) 的请求不会将任何时间戳信息从客户端传递到服务器。由于请求不传递时间戳,因此无法在传输中保留它们。
如果你想“保留”时间戳,协议文档说客户端需要发送一个SSH_FXP_SETSTAT
或SSH_FXP_FSETSTAT
请求来更新相关的文件属性。
Martin's AnswerSSHFTPClient
有使用该库执行此操作的代码。
我没有检查过,但我相信这也适用于早期版本的 SFTP 协议。
SSHFTPClient.setModTime
上传后调用。
sshFtpClient.setModTime(remotePath, new Date(new File(localPath).lastModified());