sftp如何replace文件?

例如,我有一些HTTP静态服务器。 我正在通过sftp处理.js文件。 保持同步。 我想知道如果.js文件被立即replace,或者如果stfp服务器将写入该文件作为一个stream?

举个例子:

  • 客户端开始上传文件
  • 读取stream打开
  • 服务器接受该请求
  • 打开写入stream到文件位置
  • 块发送到服务器
  • 大块接受和pipe道input写入stream
  • HTTP静态服务器试图访问尚未完全上传的文件,并select部分上传的文件?
  • 结果= js网页上的错误

要么

  • sftp将整个文件加载到内存中
  • 然后从内存转储整个文件到文件中

这对我来说是最好的场景。

没时间检查它是如何工作的。 任何解释都会很好。

scpsftp会replacesftp的文件,理论上HTTP客户端可以尝试获取部分上传的文件。

你可以通过使用rsync而不是sftp来缓解这个问题,因为这将首先写入临时文件,然后replace文件。 rsync也可以configuration为备份任何replace的文件。

这不是一个协议function。 SFTP(作为SSH的子协议/子系统)不会决定是在原地还是通过临时文件覆盖文件,服务器只执行由客户端发送的命令。 因此,从客户angular度来看,这个问题应该是可以看到的。

现在,这就是说,记住上面的内容,根据你select上传你的.js文件的客户端,你将会有不同的行为:

  • SFTP将简单地上传和覆盖您的文件就地
  • 通过SSH的rsync可以上传临时名称的文件,然后删除旧文件并重新命名新上传的文件(更好的选项)
  • 在Windows世界中,有大量的SFTP客户端可以使用临时名称上传和删除/覆盖,可能是最常见和最知名的是WinSCP