使用SFTP JSch库可以上传多部分文件吗?

我想上传一个非常大的文件,大小可以是1 GB 。 是否可以上传或下载SFTP服务器? 我正在使用JSch库。

你的问题没有意义。 你似乎做出了一些不正确的假设。 但很难说,这些是什么,因为你的问题相当稀少。

“分段上传”是与其他协议一起使用的术语。 这些通常是基于HTTP的协议(如S3,REST等),因为HTTP在上传大文件时存在问题。 例如,客户端和服务器之间的防火墙可能不允许HTTP连接保持打开足够长的时间来完成上载大文件。

这通常与SFTP无关,至少有两个原因:

  • 与HTTP相反,SFTP使用持久连接。 因此,防火墙通常不会限制SFTP会话的长度,因为这会破坏协议的常规使用,而不仅仅是上传。
  • 与基于流的HTTP相反,SFTP传输(包括上载)是基于数据包的。 所以它在某种意义上实际上是多部分的。

    使用SFTP,客户端发送任意长度的写请求序列。 不像HTTP那样庞大的数据流。 这些请求也可以在最终重新连接后恢复(这将完全等同于“多部分上传” )。

    使用JSch库,您可以使用带有offset参数的ChannelSftp.put方法重载来实现“分段上传”

     public OutputStream put( String dst, final SftpProgressMonitor monitor, final int mode, long offset) throws SftpException{ 

    或者,更简单的是,您可以使用ChannelSftp.RESUME模式,它自己处理偏移量。 另请参阅恢复文件传输以进行中途失败的文件传输或如何在JSch SFTP上重新输入?

    但同样,您并不需要使用SFTP进行“分段上传” 。 该方法的目的是允许在(罕见)断开的情况下恢复文件传输,而不是实现“分段上传”