import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.sinoservices.bms.bbl.service.impl.BblApTicketServiceImpl;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.SCPClient;
import ch.ethz.ssh2.SCPInputStream;
import ch.ethz.ssh2.SCPOutputStream;
import groovy.util.logging.Log4j;
public class RemoteServerFtpUtils {
private static Logger log = Logger.getLogger(RemoteServerFtpUtils.class);
/**
* download
* @param remoteFile 服务器上的文件名
* @param remoteTargetDirectory 服务器上文件的所在路径
* @param newPath 下载文件的路径
*/
public static String downloadFile(String ip,int port,String userName,String password,String remoteFile, String remoteTargetDirectory,String newPath){
Connection connection = new Connection(ip,port);
try {
connection.connect();
boolean isAuthenticated = connection.authenticateWithPassword(userName,password);
if(isAuthenticated){
SCPClient scpClient = connection.createSCPClient();
SCPInputStream sis = scpClient.get(remoteTargetDirectory + "/" + remoteFile);
File f = new File(newPath);
if(!f.exists()){
f.mkdirs();
}
File newFile = new File(newPath + remoteFile);
FileOutputStream fos = new FileOutputStream(newFile);
byte[] b = new byte[4096];
int i;
while ((i = sis.read(b)) != -1){
fos.write(b,0, i);
}
fos.flush();
fos.close();
sis.close();
connection.close();
log.info("下载文件"+remoteFile+"成功");
return newPath+remoteFile;
}else{
log.error("下载文件时连接远程服务器失败");
return null;
}
} catch (IOException e) {
log.error("下载文件时连接远程服务器失败:"+e.getMessage());
}
return null;
}
/**
* 获取服务器上相应文件的流
* @param remoteFile 文件名
* @param remoteTargetDirectory 文件路径
* @return
* @throws IOException
*/
public static SCPInputStream getStream(String ip,int port,String userName,String password,String remoteFile, String remoteTargetDirectory) throws IOException {
Connection connection = new Connection(ip,port);
connection.connect();
boolean isAuthenticated = connection.authenticateWithPassword(userName,password);
if(!isAuthenticated){
System.out.println("连接建立失败");
return null;
}
SCPClient scpClient = connection.createSCPClient();
return scpClient.get(remoteTargetDirectory + "/" + remoteFile);
}
/**
* 上传文件到服务器
* @param f 文件对象
* @param length 文件大小
* @param remoteTargetDirectory 上传路径
* @param mode 默认为null
*/
public static void uploadFile(String ip,int port,String userName,String password,File f, long length, String remoteTargetDirectory, String mode) {
Connection connection = new Connection(ip,port);
try {
connection.connect();
boolean isAuthenticated = connection.authenticateWithPassword(userName,password);
if(!isAuthenticated){
System.out.println("连接建立失败");
return ;
}
SCPClient scpClient = new SCPClient(connection);
SCPOutputStream os = scpClient.put(f.getName(),length,remoteTargetDirectory,mode);
byte[] b = new byte[4096];
FileInputStream fis = new FileInputStream(f);
int i;
while ((i = fis.read(b)) != -1) {
os.write(b, 0, i);
}
os.flush();
fis.close();
os.close();
connection.close();
System.out.println("upload ok");
} catch (IOException e) {
e.printStackTrace();
}
}
}