1

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

我正在使用 com.enterprisedt.net.ftp.ssh.SSHFTPclient 进行传输。

请让我知道是否有任何方法。

4

2 回答 2

1

让我知道是否有任何方法。

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

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

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

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

Martin's AnswerSSHFTPClient有使用该库执行此操作的代码。

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

于 2020-02-28T14:30:26.570 回答
1

SSHFTPClient.setModTime上传后调用。

sshFtpClient.setModTime(remotePath, new Date(new File(localPath).lastModified());
于 2020-02-28T12:07:37.563 回答