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 保证文件能够上传。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!
相关文章
Spring Boot 将yyyy-MM-dd格式的文本字符串直接转换为LocalDateTime出现的问题
这篇文章主要介绍了Spring Boot 将yyyy-MM-dd格式的文本字符串直接转换为LocalDateTime出现的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09
利用spring-data-redis实现incr自增的操作
这篇文章主要介绍了利用spring-data-redis实现incr自增的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-11-11
使用mybatis log plugin插件展示出数据库查询语句方式
本文介绍了如何安装和配置MyBatis日志插件,包括集成log4j、配置log4j.xml文件和在application.properties中添加数据库打印配置,通过这些步骤,可以在调试时查看预编译的数据库语句和实际查询语句2024-11-11


最新评论