【发布时间】:2018-06-18 05:33:03
【问题描述】:
我想上传一个非常大的文件,大小可以是 1 GB。是否可以将其上传或下载到 SFTP 服务器或从 SFTP 服务器下载?我正在使用 JSch 库。
【问题讨论】:
我想上传一个非常大的文件,大小可以是 1 GB。是否可以将其上传或下载到 SFTP 服务器或从 SFTP 服务器下载?我正在使用 JSch 库。
【问题讨论】:
你的问题没有真正的意义。你似乎做了一些不正确的假设。但很难说这些是什么,因为你的问题相当稀疏。
“分段上传”是与其他协议一起使用的术语。这些通常是基于 HTTP 的协议(如 S3、REST 等),因为 HTTP 在上传大文件时存在问题。例如,客户端和服务器之间的防火墙可能不允许 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 transfer 或How to reput on JSch SFTP?
但同样,您并不真的需要使用 SFTP“分段上传”。 ChannelSftp.RESUME 模式的目的是允许在(罕见的)断开连接的情况下恢复文件传输,而不是实现“分段上传”。
【讨论】: