ftp連線工具類
阿新 • • 發佈:2020-09-11
1.要引入的包
<!-- 檔案上傳元件 --> <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.54</version> </dependency> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.10.3</version> </dependency> <!-- 檔案流操作 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- 檔案流操作 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
2.程式碼
package com.haiot.common.upload; import com.jcraft.jsch.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.InputStream; import java.util.Properties; @Component public class FtpUtil { private static Logger logger = LoggerFactory.getLogger(FtpUtil.class); /** * ftp伺服器ip地址 */ private static String host; @Value("${ftp.host}") public void setHost(String val){ FtpUtil.host = val; } /** * 埠 */ private static int port; @Value("${ftp.port}") public void setPort(int val){ FtpUtil.port = val; } /** * 使用者名稱 */ private static String userName; @Value("${ftp.userName}") public void setUserName(String val){ FtpUtil.userName = val; } /** * 密碼 */ private static String password; @Value("${ftp.password}") public void setPassword(String val){ FtpUtil.password = val; } /** * 存放圖片的根目錄 */ private static String rootPath; @Value("${ftp.rootPath}") public void setRootPath(String val){ FtpUtil.rootPath = val; } /** * 存放圖片的路徑 */ private static String imgUrl; @Value("${ftp.img.url}") public void setImgUrl(String val){ FtpUtil.imgUrl = val; } /** * 獲取連線 */ private static ChannelSftp getChannel() throws Exception{ JSch jsch = new JSch(); //->ssh root@host:port Session sshSession = jsch.getSession(userName,host,port); //密碼 sshSession.setPassword(password); Properties sshConfig = new Properties(); sshConfig.put("StrictHostKeyChecking", "no"); sshSession.setConfig(sshConfig); sshSession.connect(); Channel channel = sshSession.openChannel("sftp"); channel.connect(); return (ChannelSftp) channel; } /** * ftp上傳圖片 * @param inputStream 圖片io流 * @param imagePath 路徑,不存在就建立目錄 * @param imagesName 圖片名稱 * @return urlStr 圖片的存放路徑 */ public static String putImages(InputStream inputStream, String imagePath, String imagesName){ try { ChannelSftp sftp = getChannel(); String path = rootPath + imagePath + "/"; createDir(path,sftp); //上傳檔案 sftp.put(inputStream, path + imagesName); logger.info("上傳成功!"); sftp.quit(); sftp.exit(); //處理返回的路徑 String resultFile; resultFile = imgUrl + imagePath + imagesName; return resultFile; } catch (Exception e) { logger.error("上傳失敗:" + e.getMessage()); } return ""; } /** * 建立目錄 */ private static void createDir(String path,ChannelSftp sftp) throws SftpException { String[] folders = path.split("/"); sftp.cd("/"); for ( String folder : folders ) { if ( folder.length() > 0 ) { try { sftp.cd( folder ); }catch ( SftpException e ) { sftp.mkdir( folder ); sftp.cd( folder ); } } } } /** * 刪除圖片 */ public static void delImages(String imagesName){ try { ChannelSftp sftp = getChannel(); String path = rootPath + imagesName; sftp.rm(path); sftp.quit(); sftp.exit(); } catch (Exception e) { e.printStackTrace(); } } }