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 保证文件能够上传。
Java FtpClient 实现文件上传服务的更多相关文章
- Java FTPClient实现文件上传下载
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...
- 构建基于阿里云OSS文件上传服务
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...
- Java开发系列-文件上传
概述 Java开发中文件上传的方式有很多,常见的有servlet3.0.common-fileUpload.框架.不管哪种方式,对于文件上传的本质是不变的. 文件上传的准备 文件上传需要客户端跟服务都 ...
- Java中实现文件上传下载的三种解决方案
第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null ...
- 【原创】用JAVA实现大文件上传及显示进度信息
用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/grayprince/UploadBigFil ...
- Java下载https文件上传到阿里云oss服务器
Java下载https文件上传到阿里云oss服务器 今天做了一个从Https链接中下载音频并且上传到OSS服务器,记录一下希望大家也少走弯路. 一共两个类: 1 .实现自己的证书信任管理器类 /** ...
- 【Java】JavaWeb文件上传和下载
文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...
- java+web+大文件上传下载
文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...
- Ceph RGW服务 使用s3 java sdk 分片文件上传API 报‘SignatureDoesNotMatch’ 异常的定位及规避方案
import java.io.File; import com.amazonaws.AmazonClientException; import com.amazonaws.auth.profile ...
随机推荐
- Html Agility Pack 解析Html
Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面 用Fir ...
- 一起学微软Power BI系列-使用技巧(5)自定义PowerBI时间日期表
1.日期函数表作用 经常使用Excel或者PowerBI,Power Pivot做报表,时间日期是一个重要的纬度,加上做一些钻取,时间日期函数表不可避免.所以今天就给大家分享一个自定义的做日期表的方法 ...
- 重温Http协议--请求报文和响应报文
http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...
- 移动站应该尝试百度MIP的五个原因
MIP是什么?MIP是百度在2016年提出的移动网页加速器项目. MIP能做什么?MIP能帮助站长和网站开发者快速搭建移动端页面. MIP怎么加速?MIP从前端渲染和页面网络传输两方面进行优化,杜绝页 ...
- Python高手之路【五】python基础之正则表达式
下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...
- [.NET] 打造一个很简单的文档转换器 - 使用组件 Spire.Office
打造一个很简单的文档转换器 - 使用组件 Spire.Office [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6024827.html 序 之前,& ...
- iOS开发之Alamofire源码深度解析
今天博客中的Alamofire源码的版本是以现在最新的3.4版本为例.上篇博客系统的对NSURLSession相关的东西进行了详细的解析,详情请看<详解NSURLSession>,为了就是 ...
- submit text3常用快捷键
在网上找了一些submit text的快捷键: Ctrl+D 选词 (反复按快捷键,即可继续向下同时选中下一个相同的文本进行同时编辑)Ctrl+G 跳转到相应的行Ctrl+J 合并行(已选择需要合并的 ...
- 不懂CSS的后端难道就不是好程序猿?
由于H5在移动端的发展如日中天,现在大部分公司对高级前端需求也是到处挖墙角,前端薪资也随之水涨船高,那公司没有配备专用的前端怎么办呢? 作为老板眼中的“程序猿” 前端都不会是非常无能的表现,那作为后端 ...
- iOS 委托与文本输入(内容根据iOS编程编写)
文本框(UITextField) 本章节继续编辑 JXHypnoNerd .文件地址 . 首先我们继续编辑 JXHypnosisViewController.m 修改 loadView 方法,向 ...