/**
-
ftp上传下载工具类
/
public class FtpUtil {
private static Logger logger = LoggerFactory.getLogger(FtpUtil.class);
@Value(" f t p c l i e n t . h o s t " ) p r i v a t e s t a t i c S t r i n g h o s t ; @ V a l u e ( " {ftpclient.host}") private static String host; @Value(" ftpclient.host")privatestaticStringhost;@Value("{ftpclient.port}")
private static int port;
@Value(" f t p c l i e n t . u s e r n a m e " ) p r i v a t e s t a t i c S t r i n g u s e r n a m e ; @ V a l u e ( " {ftpclient.username}") private static String username; @Value(" ftpclient.username")privatestaticStringusername;@Value("{ftpclient.password}")
private static String password;
@Value(" f t p c l i e n t . b a s e P a t h " ) p r i v a t e s t a t i c S t r i n g b a s e P a t h ; @ V a l u e ( " {ftpclient.basePath}") private static String basePath; @Value(" ftpclient.basePath")privatestaticStringbasePath;@Value("{ftpclient.filepath}")
private static String filePath;
/*- Description: 向FTP服务器上传文件
- @param host
-
FTP服务器hostname
- @param port
-
FTP服务器端口
- @param username
-
FTP登录账号
- @param password
-
FTP登录密码
- @param basePath
-
FTP服务器基础目录
- @param filePath
-
FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath
- @param filename
-
上传到FTP服务器上的文件名
- @param input
-
输入流
- @return 成功返回true,否则返回false
*/
public static boolean uploadFile(String host, int port, String username, String password, String basePath,
String filePath, String filename, InputStream input) {
boolean result = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(host, port);// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return result;
}
// 切换到上传目录
if (!ftp.changeWorkingDirectory(basePath + filePath)) {
// 如果目录不存在创建目录
String[] dirs = filePath.split("/");
String tempPath = basePath;
System.out.println(tempPath+"--------------");
for (String dir : dirs) {
if (null == dir || “”.equals(dir))
continue;
tempPath += “/” + dir;
if (!ftp.changeWorkingDirectory(tempPath)) {
if (!ftp.makeDirectory(tempPath)) {
return result;
} else {
ftp.changeWorkingDirectory(tempPath);
}
}
}
}
// 设置上传文件的类型为二进制类型
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.setControlEncoding(“UTF-8”); //编码
ftp.enterLocalPassiveMode(); //启动被动模式
// 上传文件
if (!ftp.storeFile(new String(filename.getBytes(“UTF-8”),“iso-8859-1”), input)) {
return result;
}
input.close();
ftp.logout();
result = true;
} catch (IOException e) {
logger.error(“系统异常”,e);
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
logger.error(“系统异常”,ioe);
}
}
}
return result;
}
/**
-
Description: 从FTP服务器下载文件
-
@param host
-
FTP服务器hostname
-
@param port
-
FTP服务器端口
-
@param username
-
FTP登录账号
-
@param password
-
FTP登录密码
-
@param remotePath
-
FTP服务器上的相对路径
-
@param fileName
-
要下载的文件名
-
@param localPath
-
下载后保存到本地的路径
-
@return
*/
public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
String fileName, String localPath) {
boolean result = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(host, port);
// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
ftp.enterLocalPassiveMode();
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return result;
}
ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(fileName)) {
File localFile = new File(localPath + “/” + ff.getName());
OutputStream is = new FileOutputStream(localFile);
Boolean isSuc = ftp.retrieveFile(ff.getName(), is);
is.close();
}
}ftp.logout(); result = true;
} catch (IOException e) {
logger.error(“系统异常”,e);
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return result;
}
public static String getBase64Picture(String pictureName){
String ftpUrl =basePath+filePath;
FTPClient ftp = new FTPClient();
InputStream inputStream = null;
String re=null;
try {
String ftp_ip=host;
int ftp_port =22;
int reply;
ftp.connect(ftp_ip, ftp_port);
// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
ftp.enterLocalPassiveMode();
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
// return result;
}
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
}
ftp.enterLocalPassiveMode();
//跳转到指定目录
ftp.changeWorkingDirectory(ftpUrl);
//5.遍历下载的目录
FTPFile[] fs = ftp.listFiles();
System.out.println(fs.length);
for (FTPFile ff : fs){
//解决中文乱码问题,两次解码
byte[] bytes=ff.getName().getBytes(“iso-8859-1”);
String fileName=new String(bytes,“utf-8”);
if(pictureName.equals(fileName)){
inputStream = ftp.retrieveFileStream(fileName);
break;
}
}
if (inputStream != null) {
byte[] data=null;
ByteArrayOutputStream outStream =new ByteArrayOutputStream();
data=new byte[inputStream.available()];
int len=0;
while((len=inputStream.read(data))!=-1){
outStream.write(data,0,len);
}
data=outStream.toByteArray();
Base64.Encoder encoder=Base64.getEncoder();
re=encoder.encodeToString(data);
System.out.println(re);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(ftp.isConnected()){
try{
ftp.disconnect();
}catch(IOException e){
e.printStackTrace();
}
}
if(null != inputStream){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}return re;
}
}
ftp.storeFile 返回false
登录服务器 :
输入:getsebool -a|grep ftp
[root@localhost ftp]# getsebool -a|grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> on
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> on
当 tftp_home_dir --> off
ftpd_full_access -->off
为 off 时应当设置成打开
输入:tftp_home_dir --> on
ftpd_full_access -->off