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

时间:2018-06-18 05:33:04

标签: java sftp jsch

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

    使用JSch库,您可以使用ChannelSftp.put method overload that takes offset parameter实现"分段上传"

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

    或者,更简单的是,您可以使用ChannelSftp.RESUME模式,它可以自行处理偏移。另请参阅Resume file transfer for a half way failed file transferHow to reput on JSch SFTP?

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