Ftp服务端安装-Linux环境
目的
为什么要搭建FTP服务器,进入maven仓库下载Jar包时点击相应的链接进去会看到目录结构,这个就是ftp站点。可以随意的下载。
环境
Linux系统为CentOS6.5
安装步骤
查询是否已安装
rpm -qa | grep vsftpd
如果结果显示为“vsftpd-1.1.3-8”,则说明系统已经安装vsftpd服务器。若没有回复,即系统中没有安装。
如下图,说明没有安装
安装并设为开机启动
yum -y install vsftpd
chkconfig vsftpd on
服务基本命令参考
service vsftpd status 查看状态
service vsftpd start 启动
serivce vsftpd restart 重启
service vsftpd stop 停止
记得开启防火墙端口,不赘述。
浏览器中输入ftp://ip:21进入ftp服务器站点
配置
配置文件路径vi /etc/vsftpd/vsftpd.conf
把匿名登录改为NO
设置指定的登录名单chroot_list_enable=YES表示所有用户都被限制在其主目录下(/home),chroot_list_enable=YES设置例外用户,目录不受限制。
其中chroot_list文件不存在,则用vi命令建立
cd /etc/vsftpd
vi chroot_list
/etc/vsftpd/ftpusers文件意思是禁止以下用户登录ftp
/etc/vsftpd/user_list文件意思是当userlist_deny=NO时仅允许以下user登录,当userlist_deny=YES时禁止以下用户登录ftp,并且也会核对ftpusers中的拒绝名单.
创建FTP用户
说明:系统自带的用户默认是可以直接进行ftp的,我们也可以单独创建只能ftp的用户
增加用户qy,指向目录/home/qy,禁止登录SSH权限。
useradd -d /home/qy -g ftp -s /sbin/nologin qy
passwd qy
删除用户
userdel -rf user #用户名可以删除用户同时删除用户文件夹 -f强制删除正在登陆的用户,-r删除用户的同时删除底下的文件夹。
用Ftp客户端上传文件
登陆成功后用put命令
上传成功
ftp基本命令
登录 : ftp 192.168.0.130 退出: bye
其它: 在终端输入help命令:
1 | ftp |
登陆ftp |
2 | dir | 显示远程主机目录 |
3 | cd remote-dir | 进入远程主机目录 |
4 | help [cmd] | 显示ftp内部命令cmd的帮助信息,如:help get |
5 | get remote-file [local-file] | 将远程主机的文件remote-file传至本地硬盘的local-file(本地文件夹) |
6 | put local-file [remote-file] | 将本地文件local-file传送至远程主机 |
7 | quit | 同bye,退出ftp会话 |
FTP工具类
package com.autumn.ftp; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import java.io.*; import java.net.MalformedURLException; public class FtpUtil { /** * 初始化ftp服务器 */ public static FTPClient initFtpClient(String hostname,Integer port,String username,String password) { FTPClient ftpClient = new FTPClient(); ftpClient.setControlEncoding("utf-8"); try { //连接ftp服务器 ftpClient.connect(hostname, port); //登录ftp服务器 ftpClient.login(username, password); //是否成功登录服务器 int replyCode = ftpClient.getReplyCode(); if(FTPReply.isPositiveCompletion(replyCode)){ System.out.println("ftp服务器登录成功"); }else{ System.out.println("ftp服务器登录失败!!!replyCode为"+replyCode); } }catch (MalformedURLException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } return ftpClient; } /** * 登出 * @param ftpClient * @return * @throws IOException */ public static void logout(FTPClient ftpClient){ try { ftpClient.logout(); if(ftpClient.isConnected()){ ftpClient.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } /** * 上传文件 * @param pathname ftp服务保存地址 * @param fileName 上传到ftp的文件名 * @param inputStream 输入文件流 * @return */ public static boolean uploadFile(FTPClient ftpClient, String pathname, String fileName,InputStream inputStream){ boolean flag = false; try{ System.out.println("开始上传文件"); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); CreateDirecroty(ftpClient,pathname); ftpClient.makeDirectory(pathname); ftpClient.setControlEncoding("utf-8"); ftpClient.storeFile(fileName, inputStream); System.out.println("上传结束"); inputStream.close(); //ftpClient.logout(); flag = true; System.out.println("上传文件成功"); }catch (Exception e) { System.out.println("上传文件失败"); e.printStackTrace(); }finally{ /*if(ftpClient.isConnected()){ try{ ftpClient.disconnect(); }catch(IOException e){ e.printStackTrace(); } }*/ if(null != inputStream){ try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return true; } /** * 下载文件 * @param pathname FTP服务器文件目录 * @param filename 文件名称(服务器) * @param localpath 下载到本地目录 * @return */ public static boolean downloadFile(FTPClient ftpClient,String pathname, String filename, String localpath){ boolean flag = false; OutputStream os=null; try { System.out.println("开始下载文件"); //切换FTP目录 ftpClient.changeWorkingDirectory(pathname); FTPFile[] ftpFiles = ftpClient.listFiles(); for(FTPFile file : ftpFiles){ if(filename.equalsIgnoreCase(file.getName())){ File localFile = new File(localpath + "/" + file.getName()); os = new FileOutputStream(localFile); ftpClient.retrieveFile(file.getName(), os); os.close(); } } //ftpClient.logout(); flag = true; System.out.println("下载文件成功"); } catch (Exception e) { System.out.println("下载文件失败"); e.printStackTrace(); } finally{ /*if(ftpClient.isConnected()){ try{ ftpClient.disconnect(); }catch(IOException e){ e.printStackTrace(); } }*/ if(null != os){ try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } return flag; } /** * 删除文件 * @param pathname FTP服务器保存目录 * @param filename 要删除的服务器文件名称 * @return **/ public static boolean deleteFile(FTPClient ftpClient,String pathname, String filename){ boolean flag = false; try { System.out.println("开始删除文件"); //切换FTP目录 ftpClient.changeWorkingDirectory(pathname); ftpClient.dele(filename); //ftpClient.logout(); flag = true; System.out.println("删除文件成功"); } catch (Exception e) { System.out.println("删除文件失败"); e.printStackTrace(); } finally { /*if(ftpClient.isConnected()){ try{ ftpClient.disconnect(); }catch(IOException e){ e.printStackTrace(); } }*/ } return flag; } //改变当前目录 public static boolean changeWorkingDirectory(FTPClient ftpClient,String directory) { boolean flag = true; try { flag = ftpClient.changeWorkingDirectory(directory); if (flag) { System.out.println("进入文件夹" + directory + " 成功!"); } else { System.out.println("进入文件夹" + directory + " 失败!开始创建文件夹"); } } catch (IOException ioe) { ioe.printStackTrace(); } return flag; } //创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建 public static boolean CreateDirecroty(FTPClient ftpClient,String remote) throws IOException { boolean success = true; String directory = remote + "/"; // 如果远程目录不存在,则递归创建远程服务器目录 if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(ftpClient,new String(directory))) { int start = 0; int end = 0; if (directory.startsWith("/")) { start = 1; } else { start = 0; } end = directory.indexOf("/", start); String path = ""; String paths = ""; while (true) { String subDirectory = new String(remote.substring(start, end).getBytes("UTF-8"), "iso-8859-1"); path = path + "/" + subDirectory; if (!existFile(ftpClient,path)) { if (makeDirectory(ftpClient,subDirectory)) { changeWorkingDirectory(ftpClient,subDirectory); } else { System.out.println("创建目录[" + subDirectory + "]失败"); changeWorkingDirectory(ftpClient,subDirectory); } } else { changeWorkingDirectory(ftpClient,subDirectory); } paths = paths + "/" + subDirectory; start = end + 1; end = directory.indexOf("/", start); // 检查所有目录是否创建完毕 if (end <= start) { break; } } } return success; } //判断ftp服务器文件是否存在 public static boolean existFile(FTPClient ftpClient,String path) throws IOException { boolean flag = false; FTPFile[] ftpFileArr = ftpClient.listFiles(path); if (ftpFileArr.length > 0) { flag = true; } return flag; } //创建目录 public static boolean makeDirectory(FTPClient ftpClient,String dir) { boolean flag = true; try { flag = ftpClient.makeDirectory(dir); if (flag) { System.out.println("创建文件夹" + dir + " 成功!"); } else { System.out.println("创建文件夹" + dir + " 失败!"); } } catch (Exception e) { e.printStackTrace(); } return flag; } /** * 测试 * @param args */ public static void main(String[] args) throws FileNotFoundException { //初始化ftpclient FTPClient ftpClient = FtpUtil.initFtpClient("127.0.0.1", 21, "autumn", "123456"); //上传文件 InputStream is = new FileInputStream("D:\\1.txt"); //输入文件流 FtpUtil.uploadFile(ftpClient,"/home/Y0/qy","2.txt",is); //下载文件 FtpUtil.downloadFile(ftpClient,"/home/Y0/qy","2.txt","D:\\ftpdownload"); //删除文件 FtpUtil.deleteFile(ftpClient,"/home/Y0/qy","2.txt"); //登出 FtpUtil.logout(ftpClient); } }
https://blog.csdn.net/wx5040257/article/details/78325074
![微信公众号二维码](https://images.cnblogs.com/cnblogs_com/aeolian/1679458/o_wechat_gzh_qrcode.jpg)