1.项目环境
框架:springmvc
项目管理工具:maven
2.必须使用的jar
1 com.jcraft
2 jsch
3 0.1.27
4 test
3.新建一个FileUpDown工具类,在类中添加以下属性
1 //linux服务器基本连接参数
2 String host = "";//ip
3 String username = "";//用户名
4 String password = "";//密码
5 int port = 22;
6
7 ChannelSftp sftp = null;
8 String remotePath = "/usr/java/file/img/";//服务器上的目标路径
9 String path;//实际路径
以上属性可以定义为private,可将相关属性值写入*.properties文件,然后读取.
4.连接服务器并获得ChannelSftp
1 //连接服务器 获得ChannelSftp
2 public ChannelSftp getSftp() {
3 try {
4 JSch jsch = new JSch();
5 Session session = jsch.getSession(username, host, port);
6 session.setPassword(password);
7 Properties properties = new Properties();
8 properties.put("StrictHostKeyChecking", "no");
9 session.setConfig(properties);
10 session.connect();
11 Channel channel = session.openChannel("sftp");
12 channel.connect();
13 sftp = (ChannelSftp) channel;
14 System.out.println("连接成功");
15 } catch (Exception e) {
16 System.out.println("连接失败");
17 e.printStackTrace();
18 }
19 return sftp;
20 }
5.上传文件
1 //上传文件
2 public String upLoad(MultipartFile file){
3 ...
4 }
现在上传的是单个文件,如果上传多个文件时可传入List,MultipartFile是spring提供的类型.
在方法中写上以下代码:
1 //上传文件
2 public String upLoad(MultipartFile file) throws IOException, SftpException {
3 InputStream is =null;
4 try{
5 //要上传的文件名
6 String filename = file.getOriginalFilename();
7 String suffix = filename.substring(filename.lastIndexOf("."));
8 //自动生成文件名
9 String autofilename = UUID.randomUUID().toString();
10 //生成路径加文件名
11 String path = remotePath + autofilename + suffix;
12 //得到文件输入流
13 is = file.getInputStream();
14 this.getSftp().put(is, path);
15 }finally {
16 //1.关闭输入流
17 //2.断开连接
18 ...
19 }
20 return path;
21 }
6.断开服务
1 public void close() {
2 if (this.sftp != null) {
3 if (this.sftp.isConnected()) {
4 this.sftp.disconnect();
5 } else if (this.sftp.isClosed()) {
6 System.out.println("断开服务成功");
7 }
8 }
9 }