一步步到顶一个FTP服务器

问题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);// 转移到FTP服务器目录
            int reply;
            // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
            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");//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);
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彳卸风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值