zoukankan      html  css  js  c++  java
  • Java FtpClient 实现文件上传服务

    一、Ubuntu 安装 Vsftpd 服务

       1、安装    

    sudo apt-get install vsftpd

       2、添加用户(uftp)

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

       3、设置用户密码

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

       4、创建用户目录

    sudo mkdir /home/uftp

       5、设置用户密码

    sudo passwd uftp

      

       6、设置/etc/vsftpd.conf配置文件

    sudo vim /etc/vsftpd.conf

        a、修改上传文件的权限

          

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

          如果没有设置local_umask 文件权限,会导致上传之后的文件,我们无法通过服务器访问(缺少权限) 

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

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

        c、设置上传文件权限:

    write_enable = YES

        这里如果不设置成YES 默认情况下不允许上传文件。

       7、创建/etc/allowed_users

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

        8、重启服务

    sudo service vsftpd restart

        

       9、使用XFTP 测试连接

        使用XFtp 创建一个新的连接,这里需要注意选择的协议ftp,端口是21,在填写好账号密码之后,即可以连接我们的服务器。

        

      测试上传文件:

        这里上传了一个txt 文件,我们可以看到文件的权限是666,这里主要就是因为我们设置了上传文件之后的权限 local_umask.

     

    二、Java FtpClient 实现文件上传

        1、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>

      

        2、创建FtpClient 对象远程连接服务器

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

          连接结果可以debug 看到:

        

        3、FtpClient  登录服务器

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

        我们可以通过判断replyCode 和replyString 来查看用户是否登录成功!

        

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

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

         5、上传文件

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

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

        

        6、退出登录

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

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

      

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

        1、nginx 配置文件

          在server 中添加 图片地址解析

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

       

         2、重启Nginx

    ./nginx -s reload

        

        3、查看图片

    http://192.168.148.128/hello.jpg

        

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

  • 相关阅读:
    Leetcode 126.单词接龙II
    Leetcode 125.验证回文串
    Leetcode 124.二叉树中的最大路径和
    Leetcode 123.买卖股票的最佳时机III
    Leetcode 122.买卖股票的最佳时机II
    西子凌波回复集5(网友整理版)
    西子凌波回复集4(网友整理版)
    西子凌波回复集3(网友整理版)
    K杀(逻辑-标准-规则)
    西子凌波49:2018年11月29日微博解盘提示
  • 原文地址:https://www.cnblogs.com/jaycekon/p/6221925.html
Copyright © 2011-2022 走看看