欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java FtpClient 实现文件上传服务

程序员文章站 2024-03-09 17:26:35
一、ubuntu 安装 vsftpd 服务 1、安装     sudo apt-get install vsftpd 2、添加用户(uftp) sudo usera...

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

Java FtpClient 实现文件上传服务

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

sudo vim /etc/vsftpd.conf

    a、修改上传文件的权限:

Java FtpClient 实现文件上传服务

    这里会有一个问题,默认情况下的默认权限是 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

Java FtpClient 实现文件上传服务

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

7、创建/etc/allowed_users

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

Java FtpClient 实现文件上传服务

8、重启服务

sudo service vsftpd restart

Java FtpClient 实现文件上传服务

9、使用xftp 测试连接

Java FtpClient 实现文件上传服务

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

Java FtpClient 实现文件上传服务

测试上传文件:

这里上传了一个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 看到:

Java FtpClient 实现文件上传服务

3、ftpclient  登录服务器

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

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

Java FtpClient 实现文件上传服务

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);

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

Java FtpClient 实现文件上传服务

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、查看图片

Java FtpClient 实现文件上传服务

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!