如何将文件从目录A移动到远程服务器中的目录B?

我正在使用JSch连接到由GWT制作的网站中的SFTP。 我读过sftpChannel.get()sftpChannel.rename()sftpChannel.rm()一个小例子。

但我没有找到将文件从远程服务器复制到远程服务器b目录的解决方案。

例如,我想将文件从/appl/user/home/test/temp复制到/appl/user/home/test/ 。 Filename = abc.jpg

我在这里惊呆了几个小时,因为网络的大多数解决方案是从远程服务器到本地的文件,或者从本地上传到远程服务器的文件。

 String existingfile = "abc.jpg"; String newfile = "123.jpg"; FileDirectory = "/appl/user/home/test/"; sftp.cd(FileDirectory+"temp/"); sftp.rename(newfile, FileDirectory+newfile); 

比方说, abc.jpg存在于/appl/user/home/test/

我在/appl/user/home/test/temp/上传了一个123.jpg

现在,我想将123.jpg移动到/appl/user/home/test/并删除/appl/user/home/test/中的abc.jpg

我该怎么办?

好像是SftpChannel.rename(); 需要使用文件的完整路径而不是cd到我要移动的文件的目录。

 String existingfile = "abc.jpg"; String newfile = "123.jpg"; FileDirectory = "/appl/user/home/test/"; sftp.cd(FileDirectory+"temp/"); if (sftp.get( newfile ) != null){ sftp.rename(FileDirectory + "temp/" + newfile , FileDirectory + newfile ); sftp.cd(FileDirectory); sftp.rm(existingfile ); } 

核心SFTP协议不支持复制远程文件。

有协议的copy-file扩展草案,但只有少数SFTP服务器支持(例如ProFTPD / mod_sftp和Bitvise SFTP服务器)。

JSch库也不支持copy-file扩展名。

备择方案:

  • 如果您具有shell访问权限,请打开“exec”通道,并使用shell cp命令(或服务器操作系统的等效命令)。
    请参阅Exec.java示例 。
  • 否则,您唯一的选择是将文件下载到本地临时位置,并将其副本上载回另一个/目标远程目录。 或者使用流,以避免临时文件,如@KushalShukla的回答中所建议的那样 。

另请参阅如何使用SFTP将文件复制/复制到另一个目录?

您可以编写一个普通的Java FileInputStreamFileOutputStream代码,而不是使用像这样的路径/appl/user/home/test/temp使用完整路径及其IpAddress或远程服务器名称+您的路径,例如myremoteserver/appl/user/home/test/temp