Spring启动应用程序。用户选择自己选择的服务器,然后选择本地系统上的文件,该文件将SFTP发送到该服务器。
通过以下方式起作用:输入流,将文件读取到根项目中的文件夹中。 sftp方法需要文件路径才能起作用。由于无法在用户系统上获取文件的文件路径,而无法获取文件,因此我将其放在本地,然后从那里提供路径。
当从intellij运行我的项目时,这完美地工作,而打包成jar时则不是那么完美。
经过一番阅读之后,将文件放入罐子似乎不太好。现在有什么想法吗?谢谢
public void SFTP(MultipartFile file, String friendlyName, String filePath) throws Exception {
String host = "10.3.152.245"; //host:IP
String user = "cloud";
String password = "Password1";
System.out.println("File path: " + filePath);
try {
String fileName = renameLocal(file);
java.util.Properties config = new java.util.Properties();
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, 22);
session.setPassword(password);
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
sftpChannel.cd("/");
sftpChannel.cd(filePath);
sftpChannel.put("\\upload-dir\\" + fileName, ".");
sftpChannel.rename(filePath + "/" + fileName, filePath + "/" + file.getOriginalFilename());
session.disconnect();
sftpChannel.disconnect();
Path path = FileSystems.getDefault().getPath(".\\upload-dir\\" + fileName);
Files.delete(path);
}catch (Exception e){
throw new Exception();
}
}
上面的方法是用户上传文件时调用的SFTP方法。静态主机用户并暂时通过。如您所见,我将文件放在本地(方法不在这里)在upload-dir中。然后向sftpChannel.put方法提供upload-dir \ filename