linux(centos7)安装ftp服务器并使用java进行简单的文件上传

ftp安装

服务搭建:服务器为腾讯云服务器, 操作系统centos 7
安装命令: //有的服务器可能没有安装yum,需要先下载安装yum

yum -y install vsftpd

中途会有询问,输入yes 回车,直到出现complete安装完成

默认安装目录是/etc/vsftpd

然后修改配置文件
目录是/etc/vsftpd/vsftpd.conf
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
值改为NO,意思是禁止匿名登录,不改也能用,不安全(之前服务器被黑过,慌)

1.3、设置vsftpd开机启动//自己玩可略过
systemctl enable vsftpd.service

1.4、启动并查看vsftpd服务状态,systemctl启动服务成功不会有任何提示,绿色的active表示服务正在运行
启动服务
systemctl start vsftpd.service

查看服务状态
systemctl status vsftpd.service

然后新建用户并指定用户根目录并禁止此用户登录操作系统(-s /bin/false)
useradd username -d /etc/vsftpd/ftpdata -s /bin/false
设置密码,passwd username
文件夹读写权限配置 chmod -777 /etc/vsftpd/ftpdata

文件夹可以指定,最好事先创建好文件夹 mkdir xxx
这里有个坑,就是我如果在ftpdata目录下新建文件夹,用户并没有新建的文件夹的读写权限,还需要继续授权,授权目录下所有文件夹权限
chmod -777 /etc/mulu/* 没试过 执行命令后新建目录是否管用

然后直接浏览器或者计算机里面输入 ftp://ip即可访问,输入用户名密码,展示的目录为创建用户时配置的根目录,能看到的文件都能操作(下载啥的)。

java连接ftp并实现文件上传

maven依赖

   <!-- FTP工具类 -->
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.3</version>
        </dependency>

Java代码

public static void main(String[] args) throws Exception{
        File  file = new File("D:\\license_freeware.txt");
        FTPClient ftpClient = new FTPClient();
        String upFile = "66666.txt";
        ftpClient.setControlEncoding("GBK");
        String hostname = "118.24.xxx.xxx";
        int port = 21;
        String username = "user";
        String password = "pswd";

        try {
            //链接ftp服务器
            ftpClient.connect(hostname, port);
            //登录ftp
            ftpClient.login(username, password);
            int  reply = ftpClient.getReplyCode();
            System.out.println(reply);
            //如果reply返回230就算成功了
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftpClient.disconnect();
                return ;
            }
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            String remoteFileName = "upload/"+upFile;
            InputStream input = new FileInputStream(file);
            boolean upload =ftpClient.storeFile(remoteFileName, input);//文件你若是不指定就会上传到根目录下,此时文件目录是   根目录/upload/66666.txt
            boolean rename = ftpClient.rename("upload/66666.txt","dir/77777.txt");//看起来只是改名,实际上可以实现文件位置移动,类似于剪切粘贴比如这里文件位置从upload/66666.txt移动到了dir/77777.txt,原有66666.txt文件会消失
            System.out.println("upload~~~~~~~~~~~~~~~~"+upload);
            System.out.println("rename~~~~~~~~~~~~~~~~"+rename);
            input.close();
            ftpClient.logout();

        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally
        {
            if (ftpClient.isConnected())
            {
                try
                {
                    ftpClient.disconnect();
                } catch (IOException ioe)
                {
                    ioe.printStackTrace();
                }
            }

        }
    }

关键逻辑代码里面都有标注,都是最基本的api调用,只是单纯的使用
另外记录一下ftp,sftp,ftps
ftp:文件传输协议,很单纯
sftp:使用ssh加密的文件传输协议,会牺牲一部分资源用于数据保密,
ftps:使用ssl加密的文件传输协议,但是ssl加密一般用于http等协议的加密,ssl加密方式类似于打包,ssh类似于铺设管道,所以ssh更适合大文件传输。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值