Java FtpClient 实现文件上传服务

1、Ubuntu 安装 Vsftpd 服务

   一、安装    linux

sudo apt-get install vsftpd

   二、添加用户(uftp)nginx

sudo useradd -d /home/uftp -s /bin/bash uftp

   三、设置用户密码apache

sudo useradd -d /home/uftp -s /bin/bash uftp

   四、建立用户目录vim

sudo mkdir /home/uftp

   五、设置用户密码bash

sudo passwd uftp

  

   六、设置/etc/vsftpd.conf配置文件服务器

sudo vim /etc/vsftpd.conf

    a、修改上传文件的权限工具

      

      这里会有一个问题,默认状况下的默认权限是 077 也就是对应Linux 中的700 计算规则是 linux 的权限 777 - local_umask测试

      若是没有设置local_umask 文件权限,会致使上传以后的文件,咱们没法经过服务器访问(缺乏权限) spa

    b、在配置文件末尾添加:debug

userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/allowed_users
seccomp_sandbox=NO
local_enable=YES

    c、设置上传文件权限:

write_enable = YES

    这里若是不设置成YES 默认状况下不容许上传文件。

   七、建立/etc/allowed_users

    添加容许任务加入到文件中,

    八、重启服务

sudo service vsftpd restart

    

   九、使用XFTP 测试链接

    使用XFtp 建立一个新的链接,这里须要注意选择的协议ftp,端口是21,在填写好帐号密码以后,便可以链接咱们的服务器。

    

  测试上传文件:

    这里上传了一个txt 文件,咱们能够看到文件的权限是666,这里主要就是由于咱们设置了上传文件以后的权限 local_umask.

 

2、Java FtpClient 实现文件上传

    一、Maven 依赖

<!-- Apache工具组件 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
        </dependency>

  

    二、建立FtpClient 对象远程链接服务器

            FTPClient ftp = new FTPClient();
            //连接远程服务
            ftp.connect("192.168.148.128", 21);

      链接结果能够debug 看到:

    

 

    三、FtpClient  登陆服务器

            ftp.login("uftp", "**");
            //返回登陆结果状态
            int reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return ;
            }

    咱们能够经过判断replyCode 和replyString 来查看用户是否登陆成功!

    

 

    四、修改文件上传路径和文件类型

            //修改上传文件路径
            ftp.changeWorkingDirectory("/home/uftp/images/");
            //修改文件类型
            ftp.setFileType(FTP.BINARY_FILE_TYPE);    

 

     五、上传文件

            //获取上传文件的输入流
            FileInputStream fileInputStream = new FileInputStream(new File("D:/123.jpg"));
            //把文件推到服务器上
            ftp.storeFile("hello.jpg", fileInputStream);

      上传文件完成以后,经过查看返回结果判断时候上传成功

    

 

    六、退出登陆

            //退出登陆
            ftp.logout();

 

 

     以上步骤就是使用FtpClient完成了一次文件上传操做。

  

 3、使用Nginx 查看服务器图片

    一、nginx 配置文件

      在server 中添加 图片地址解析

location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt)${
     root /home/uftp/images;
     expires 7d;  
}   

 

   

     二、重启Nginx

./nginx -s reload

    

    三、查看图片

http://192.168.148.128/hello.jpg

    

 

   总结:到这里咱们就完成了一个简单的图片上传到服务器,而且展现的小demo,配置过程当中主要碰到的问题是关于文件权限的问题,若是没有设置vsftpd 中的配置文件中local_umask,即便咱们成功上传了文件,也没法使用nginx 进行浏览,设置write_enable = YES 保证文件可以上传。

相关文章
相关标签/搜索