【问题标题】:Is multipart file upload possible with SFTP JSch library?使用 SFTP JSch 库可以上传多部分文件吗?
【发布时间】:2018-06-18 05:33:03
【问题描述】:

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

【问题讨论】:

    标签: java sftp jsch


    【解决方案1】:

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

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

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

    • 与 HTTP 不同,SFTP 使用持久连接。因此,防火墙通常不会限制 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“分段上传”ChannelSftp.RESUME 模式的目的是允许在(罕见的)断开连接的情况下恢复文件传输,而不是实现“分段上传”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-13
      • 2011-06-17
      • 2015-07-18
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      相关资源
      最近更新 更多