问题1.
最烦人的就是这个网络,三种方式。。。。。。算了吧。
实际用的就是最简单的桥接模式,不勾选复制物理网络连接状态。
启动虚拟机,配合WinScp与PuTTy修改配置文件完成网络配置
开工干活。。
搭建ftp服务器,本来用的是别人的VM可惜字符集不对有些配置还不行。搞了半天还是自己的虚拟机好使。
yum install vsftpd
安装完之后我们要对它进行配置,才能正常使用。编辑vsftpd的配置文件vi /etc/vsftpd/vsftpd.conf
vi编辑器中的搜索使命是斜杠“/”,然后输入要查找的内容,回车确定。以下是要更改的选项
anonymous_enable=NO #禁止匿名访问
ascii_upload_enable #允许使用ascii码上传
ascii_download_enable #允许使用ascii码下载
userlist_deny=NO #(这条需手动添加到最后)使用FTP用户表,表里没有的用户需要添加才能登录
设置完毕之后,ESC,冒号wq回车。启动vsftpd服务/etc/init.d/vsftpd start,看到[确定]即为启动成功。
设置ftp权限
vi /etc/vsftpd/vsftpd.conf
将anonymous_enable=YES 改为 anonymous_enable=NO
ESC返回,输入“:wq”保存并退出
添加账号信息
useradd -d /home/test test //增加用户test,并制定test用户的主目录为/home/test
passwd test //为test设置密码
限制用户只能访问/home/test,不能访问其他路径
修改/etc/vsftpd/vsftpd.conf如下:
chroot_list_enable=YES //限制访问自身目录
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
编辑 vsftpd.chroot_list文件,将受限制的用户添加进去,每一个占用一行
重新启动VSFTP:
#service vsftpd restart //重启服务
问题2.
忘记开始防火墙导致无法访问
停止防火墙 service iptables stop
启动防火墙 service iptables start
查看防火墙配置 iptables -L -n
问题3.
[500 OOPS](http://www.2cto.com/os/201305/215684.html):cannot change directory 用户没有权限或参数设置错误
sestatus -b| grep ftp 查看状态
setsebool ftp_home_dir on 修改参数
public static void testUpload(String ip, int port, String userName,
String passWord,String pathName, byte[] bs, String nameFile) {
FTPClient ftpClient = new FTPClient();
InputStream inputStream = null;
inputStream = new ByteArrayInputStream(bs);
System.out.println("上传文件....");
try {
ftpClient.connect(ip);
ftpClient.setDefaultPort(port);
ftpClient.login(userName, passWord);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.makeDirectory(pathName);
ftpClient.changeWorkingDirectory(pathName);
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
if (bs != null) {
ftpClient.storeFile(nameFile,inputStream);
}
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("FTP客户端出错!", e);
} finally {
IOUtils.closeQuietly(inputStream);
System.out.println("文件上传成功··");
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
}
/**
* 文件下载
* @param ip
* @param port
* @param userName
* @param passWord
* @param pathName
* @param filepath
* @param nameFile
* @param request
* @param response
*/
public static void testDownload(String ip, int port, String userName,
String passWord, String pathName, String FileName, String realName,HttpServletRequest request,
HttpServletResponse response) {
FTPClient ftpClient = new FTPClient();
FileOutputStream fos = null;
System.out.println("下载文件....");
try {
ftpClient.connect(ip);
ftpClient.setDefaultPort(port);
ftpClient.login(userName, passWord);
ftpClient.changeWorkingDirectory(pathName);
int reply;
reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
}
FTPFile[] fs = ftpClient.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(realName)) {
File localFile = new File(realName);
OutputStream is = new FileOutputStream(localFile);
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
String checkBrowse =request.getHeader("user-agent");
String FIREFOX ="Firefox";
Pattern p =Pattern.compile(FIREFOX,Pattern.MULTILINE);
Matcher m=p.matcher(checkBrowse);
boolean is1 = m.find();
String fileName = new String(FileName.getBytes("utf-8"), "ISO8859_1");
if(!is1){
fileName = URLEncoder.encode(FileName,"UTF-8");
}
response.setContentType("application/binary;charset=ISO8859-1");
response.setHeader("Content-disposition", "attachment; filename="+ fileName);
request.setCharacterEncoding("UTF-8");
response.setHeader("Content-Length", String.valueOf(localFile.length()));
bis = new BufferedInputStream(new FileInputStream(realName));
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
bis.close();
bos.close();
is.close();
break;
}
}
ftpClient.logout();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("FTP客户端出错!", e);
} finally {
IOUtils.closeQuietly(fos);
System.out.println("文件下载成功····");
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
}