我想上传一个非常大的文件,大小 1 GB 。是否可以上传或下载SFTP服务器?我正在使用JSch库。
答案 0 :(得分:2)
你的问题没有意义。你似乎做了一些不正确的假设。但是很难说,这些是什么,因为你的问题相当稀少。
"分段上传" 是与其他协议一起使用的术语。这些通常是基于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进行"分段上传" 。该方法的目的是允许在(罕见)断开连接时恢复文件传输,而不是实现"分段上传" 。