Java實現上傳文件到指定服務器指定目錄(ChannelSftp實現文件上傳下載)


 

package com.tianyang.task.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;

import ch.ethz.ssh2.Connection;

import com.jcraft.jsch.*;
import com.tianyang.biz.constants.TYEnumConstants;
import com.tianyang.task.constants.TYTaskConstants;
import org.apache.log4j.Logger;

public class SftpClientUtil {
protected static Logger logger = Logger.getLogger(SftpClientUtil.class);

/** 主機 */
private final static String host = TYTaskConstants.tyTaskConfig.getACQUISITION_SYSTEM_SFTP();
/** 端口 */
private final static int port = Integer.valueOf(TYTaskConstants.tyTaskConfig.getACQUISITION_SYSTEM_SFTP_PORT());
/** 用戶名 */
private final static String username = TYTaskConstants.tyTaskConfig.getACQUISITION_SYSTEM_USERNAME();
/** 密碼 */
private final static String password = TYTaskConstants.tyTaskConfig.getACQUISITION_SYSTEM_PASSWORD();
/** 目錄 */
private final static String directory = TYTaskConstants.tyTaskConfig.getACQUISITION_SYSTEM_DIRECTORY();
/** url地址 */
private final static String baseUrl = TYTaskConstants.tyTaskConfig.getACQUISITION_SYSTEM_BASEURL();

/**
* 上傳單個文件
* @param remoteFolder
* 上傳到SFTP服務器的路徑
* @param sourceFile
* 上傳的文件地址
* @param remoteFileName
* 上傳到SFTP服務器后的文件名
*
* @throws Exception
*/
public static String uploadFile(String remoteFolder,String sourceFile, String remoteFileName) throws Exception {
long start = System.currentTimeMillis();
remoteFolder = directory + remoteFolder;

File file = new File(sourceFile);
InputStream fileStream = new FileInputStream(file); // 提升作用域
ChannelSftp sftp = connect();
try{
//如果文件夾不存在,則創建文件夾
if(sftp.ls(remoteFolder) == null){
sftp.mkdir(remoteFolder);
}
//切換到指定文件夾
sftp.cd(remoteFolder);
}catch (SftpException e){
//創建不存在的文件夾,並切換到文件夾
sftp.mkdir(remoteFolder);
sftp.cd(remoteFolder);
}
sftp.put(fileStream, remoteFileName);
disconnect(sftp);
logger.info("文件上傳成功!! 耗時:{"+(System.currentTimeMillis() - start)+"}ms");
return baseUrl + remoteFileName;
}

/**
* 刪除文件
* @param deleteFile
* 要刪除的文件
*
* @throws Exception
*/
public void delete(String deleteFile) throws Exception {
ChannelSftp sftp = connect();
sftp.cd(directory);
sftp.rm(deleteFile);
disconnect(sftp);
}

/**
* 連接sftp服務器
*
* @throws Exception
*/
public static ChannelSftp connect() throws Exception {
JSch jsch = new JSch();
try{
//采用指定的端口連接服務器
Session session = jsch.getSession(username,host,port);
if(password != null){
//設置登陸主機的密碼
session.setPassword(password);
}

Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
session.setConfig(sshConfig);
session.connect();

//創建sftp通信通道
Channel channel = session.openChannel("sftp");
channel.connect();
logger.info("sftp server connect success !!");
return (ChannelSftp) channel;
}catch (JSchException e){
logger.error("SFTP服務器連接異常!!", e);
throw new Exception("SFTP服務器連接異常!!",e);
}
}


/**
* Disconnect with server
*
* @throws Exception
*/
public static void disconnect(ChannelSftp sftp) throws Exception {
if (sftp != null) {
if (sftp.isConnected()) {
sftp.disconnect();
} else if (sftp.isClosed()) {
}
}
}

public static void main(String[] args){
//數據文件名
String dataFileName = "008_ZQQK_U_20200707_I.txt";
String dyw_key1 = "/Users/lpl/Documents/myself/tempfile/008_ZQQK_U_20181108_I.txt";
String resultDto1 = null;
try {

resultDto1 = new SftpClientUtil().uploadFile("20181108", dyw_key1, dataFileName);
} catch (Exception e) {
e.printStackTrace();
}
// if(resultDto1 != null && resultDto1.getCode().equals("0000")) {
System.out.println("--上送ZQQK文件-----成功, 文件key = " + resultDto1);
// }else{
// System.out.println("--上送ZQQK文件-----失敗, 文件key = " + resultDto1.getMessage());
// }
}


}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM