本文主要对Java FtpClient实现简单的图片上传到服务器的方法进行介绍,并且展示的小demo中,对配置过程中主要碰到的问题:关于文件权限的问题也进行了说明,下面跟着小编一起来看下吧
一、Ubuntu 安装 Vsftpd 服务
1、安装
sudo apt-get install vsftpd
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
这里会有一个问题,默认情况下的默认权限是 077 也就是对应Linux 中的700 计算规则是 linux 的权限 777 - local_umask
如果没有设置local_umask 文件权限,会导致上传之后的文件,我们无法通过服务器访问(缺少权限)
userlist_deny=NO userlist_enable=YES userlist_file=/etc/allowed_users seccomp_sandBox=NO local_enable=YES
write_enable = YES
7、创建/etc/allowed_users
8、重启服务
sudo service vsftpd restart
9、使用XFTP 测试连接
使用XFtp 创建一个新的连接,这里需要注意选择的协议ftp,端口是21,在填写好账号密码之后,即可以连接我们的服务器。
这里上传了一个txt 文件,我们可以看到文件的权限是666,这里主要就是因为我们设置了上传文件之后的权限 local_umask.
1、Maven 依赖
org.apache.commonscommons-lang3org.apache.commonscommons-iocommons-netcommons-net
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 来查看用户是否登录成功!
//修改上传文件路径 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);
6、退出登录
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 保证文件能够上传。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程之家!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。