FTP是File Transfer Protocol(文件传输协议)的英文简称,是用于Internet上的控制文件的双向传输。同时也是一个应用程序,基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守这个协议以传输文件。FTP的使用过程中有两个概念,上传和下载。下载就是从远程主机拷贝文件到自己的电脑上,上传就是将自己的文件拷贝到远程主机上。
Vsftpd是very secure FTP daemon的缩写,安全性是他的一个最大的特点。Vsftpd是一个UNIX类操作系统上运行的服务器的名字,它可以运行在注入Linux、BSD、Solaris等系统上,是一个完全免费的,开源的ftp服务器软件,支持很多其他的FTP服务器所不支持的特征。
以前写代码做上传基本都是在项目下新建个文件夹存放上传的文件,这样做的优点是在传统的单体架构 项目中,使用方便,便于管理。但是如果是分布式的环境图片引用就会出现问题,而且图片等文件的下载会给服务器增加额外的压力。
传统的图片管理方式在分布式环境中的问题:
在分布式的环境中图片管理一般是使用如下方式:
vsftpd的安装:
1、安装vsftpd组件:yum -y install vsftpd 安装完成后在/etc/vsftpd/vsftpd.conf文件是vsftpd的配置文件。
2、添加一个Linux用户用来登录ftp服务器:useradd ftpuser 登陆后的默认路径为/home/ftpuser
3、给新建的用户添加密码:passwd ftpuser,两次密码输入相同,即可修改密码。
4、防火墙开启21端口:ftp默认的端口是21,此方式为centos6以下的命令
5、修改selinux:(Security-Enhanced Linux)是美国国安局对于强制访问控制的实现,是Linux历史上最杰出的新安全子系统。大部分时候访问ftp会被selinux拦截,可以自己设置关闭selinux:
selinux一共有三种模式:enforcing(强制模式):开始限制domain/type
permissive(宽容模式):仅会有警告信息
disabled(关闭):关闭selinux
设置selinux:
设置selinux:需要将ftpd_full_access和tftp_home_dir两项修改为on
setsebool -P ftpd_full_access 1
6、关闭匿名访问:vim /etc/vsftpd/vsftpd.conf
:set number打开行数,找到100行,设置如下,根据自己需要自行设置,我用cengos7,不设置这俩个的话访问不了ftp:
重启ftp:service vsftpd restart.注意,centos7命令不同,systemctl restart vsftpd.service
查看vsftpd进程:ps -ef | grep vsftpd
设置开机启动:systemctl enable vsftpd.service
在做图片上传之前先使用工具往用户目录下放一张图片,使用浏览器通过地址访问,格式为:
ftp://username:password@ip地址/图片路径/图片名称
因为之前在etc/vsftpd/vsftpd.conf中设置了 禁止匿名访问,所以访问的时候要输入用户名密码
在做图片上传时需要用到FTPClient工具,它是Apache提供的一个开源的基于java的FTP客户端工具,使用时需要加入jar包
使用时基本设置如下,此外还提供了很多方法可供使用:
由于在开发 中频繁的写这些比较繁琐,为了效率和提高代码的复用性,所以将文件上传和下载封装成一个工具类FTPUtil.java 用来使用。
上传时使用KindEditor,这是一个富文本编辑器,同样的工具还有ueditor等,主要是让用户在网站上获得所见即所得的编辑效果。
在用KindEditor做图片上传时使用了下面几个工具类:
FTPUtil:FTPClient工具类
IDUtils:生成id的工具类,用来生成图片名称
JsonUtils:对象与json格式转换的工具类。
在JSP中使用KindEditor的步骤:
1、在项目中添加KindEditor和JQuery的js文件
2、在页面中通过script标签引入js
3、在页面中添加textarea标签
4、调用KindEditor的API将KindEditor渲染到textarea
KindEditor初始化参数介绍:
uploadJson:指定上传文件的服务器端程序
FIlePostName:指定上传文件form名称
dir:指定上传文件类型