vsftpd-基于ftp协议的文件传输服务器软件
第一部分:在Linux上部署vsftpd服务
1. vsftpd简介
1.1 vsftpd是什么?
ftp(File Transfer Protocol)文件传输协议。(实现不同操作系统之间文件的传输),vsftpd是一个基于ftp协议的文件传输服务器软件
1.2 vsftpd作用是什么?
传输文件(跨平台、跨操作系统)
传统上传方式的问题
在传统上传方式中,在项目的跟目录下创建upload目录,将图片上传到tomcat服务器中

但是在分布式环境下,是有多个Tomcat存在的,当把图片直接上传到Tomcat服务器时,容易出现图片丢失的问题。

使用分布式系统图片上传方案
直接将图片上传到一个指定的目录,访问、下载图片都访问这个目录。由于项目最终是要部署到Linux环境,所以直接将图片上传到Linux服务器。

问题:那如何将图片上传到Linux呢?答:使用vsftpd组件,实现文件传输。
1.3 如何使用
- 服务端:在linux安装vsftpd软件,开启服务。
- 客户端:通过FtpClient客户端建立和服务器的连接,向服务器发送请求。
2 实现步骤说明
(1)在Linux上安装vsftpd服务。
(2)根据图片的地址访问图片。(最终保存到数据库的是图片的路径)
(3)web工程中实现图片上传。
2.1 第一部分:在Linux上部署vsftpd服务
思路 :(1)安装软件
(2)测试服务是否可用
2.1.1 第一步:安装vsftpd软件

2.1.2 第二步:关闭匿名访问
修改vsftpd配置文件

2.1.3 第三步:添加一个FTP用户
创建一个y9onghu,专门用来访问vsftpd服务

2.1.4 第四步:设置防火墙
vsftpd服务默认端口号为21,修改防火墙,开放此端口,重启防火墙。
[root@CentOS2 ~]# vim /etc/sysconfig/iptables 

2.1.5 第五步:修改selinux(Linux安全内核系统)
1.先查看selinux,默认是禁用了ftp访问的

2.修改selinux,开发ftp访问权限

2.1.6 第六步:启动vsftpd服务

2.1.7 第七步:通过浏览器访问测试
访问地址:ftp://192.XXX.XXX.24:21,发现无法访问
原因:被动模式下,数据传输服务被防火墙拦截了
(1)被动模式
第二次请求过程中,客户端跟服务端建立数据通道;
服务端被动将数据响应给客户端。
第二次请求数据传输,会随机生成一个服务端口。被防火墙禁用。

(2)主动模式
服务端主动向客户端发送数据,会被客户端的防火墙禁掉。
多数客户端不支持主动模式,不安全。

2.1.8 第八步:配置被动模式

2.添加防火墙范围设置(在文件尾部添加即可)

3.修改防火墙,开启30000:30999之间所有的端口。
[root@CentOS2 ~]# vim /etc/sysconfig/iptables

4.重启防火墙。

5.重启vsftpd服务

6.再次访问浏览器,发现可以正常连接了。 
2.19 第九步:java代码测试上传功能
Java代码中,是通过FtpClient客户端建立和服务端的连接的。在ego-base工程中测试。
1.在ego-base中添加ftp服务的依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.gzsxt.ego.1115</groupId>
<artifactId>ego-project</artifactId>
<version>1.0</version>
</parent>
<artifactId>ego-base</artifactId>
<dependencies>
<!-- Mybatis -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
</dependency>
</dependencies>
</project>
2.创建测试类
说明:使用ftpuser用户上传,指定上从目录/home/ftpuser/ego/images
注意:为了保证ftpuser有这个目录下的写权限,我们要用ftpuser用户创建这个目录。
su命令:切换用户


测试类TestFtp
package cn.gz.base.test;
import java.io.File;
import java.io.FileInputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
public class TestFtp {
public static void main(String[] args) {
try {
//1.创建ftp客户端
FTPClient client = new FTPClient();
//2.连接服务端
client.connect("192.168.232.24",21);
//3.登录,认证身份
boolean flag = client.login("ftpuser", "ftpuser");
if(flag){
/**
* 4.指定图片上传的目录,默认路径在ftpuser用户的家目录下
* 确保ftpuser用户有这个目录下的写权限
* 在linux上,使用ftpuser这个用户,去创建这个目录
*/
client.changeWorkingDirectory("/home/ftpuser/ego/images");
//5.指定上传为被动上传 因为,很多的客户端禁止主动模式
client.enterLocalPassiveMode();
//6.指定上传方式为二进制,即使用字节流
client.setFileType(FTP.BINARY_FILE_TYPE);
//7.上传
File pic = new File("D:/img/123.jpg");
boolean result = client.storeFile(System.currentTimeMillis()+".jpg", new FileInputStream(pic));
if(result){
System.out.println("上传成功!");
}else{
System.out.println("上传失败!!!");
}
}
client.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}

vsftpd-基于ftp协议的文件传输服务器软件的更多相关文章
- 转:【专题十一】实现一个基于FTP协议的程序——文件上传下载器
引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...
- 专题十一:实现一个基于FTP协议的程序——文件上传下载器
引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...
- Tftp文件传输服务器(基于UDP协议)
一个简单的UDP服务端与客户端 服务端: from socket import * #创建套接字 udp_server = socket(AF_INET,SOCK_DGRAM) msg_server ...
- 基于BT协议的文件分发系统
基于BT协议的文件分发系统构成: 1.一个Web服务器:保存着种子文件 2.一个种子文件:保存共享文件的一些信息(文件名,文件大小 ,Tracker服务器地址,torrent为后缀) ...
- 基于HTTP协议下载文件的实现
最近在开发文件下载的程序,该程序是基于HTTP开发的. 首先是了解了文件传输到客户端的大概格式,然后分析该格式,实现写入文件的功能. 自己构造的HTTP包如下: GET /*********.rar ...
- 用c++开发基于tcp协议的文件上传功能
用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...
- C# FTP上传文件至服务器代码
C# FTP上传文件至服务器代码 /// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo ...
- 四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享
一.基于HTTPS协议的12306抢票软件设计与实现--实现效果 二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现-- ...
- FTP文件传输服务器原理
FTP服务器,全称File Transfer Protocol Server,是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务.FTP,文件传输协议(File Transfer ...
随机推荐
- SWPU-ACM集训队周赛之组队赛(3-11) C题题解
点这里去看题 模拟,注意细节 #include<stdio.h> #include<string.h> int main() { ]; //q[]储存正负信息 scanf(&q ...
- python 引入本地 module
数据校验时,需要引入本地的一个告警python代码,引入的方式如下: import sys import os # 引入本地文件目录,或和需要引入的python文件放在同一个文件夹下 sys.path ...
- eclipse经常出现——未响应!!!
现象:启动eclipse缓慢,启动完成经常出现未响应情况.偶然在打开一个项目时候,也出现未响应. 原因:虚拟内存不足,或者电脑本身内存不足.但是目前绝大多数PC而言,内存应该是充足的,因此可以修改虚拟 ...
- 压测工具之JMeter之环境配置及运行
一.下载JMeter 地址:http://jmeter.apache.org/download_jmeter.cgi 系统:win7 x64 在 Binaries 目录下选择一个合适自己系统的版本,不 ...
- Spring MVC 原理探秘 - 一个请求的旅行过程
1.简介 在前面的文章中,我较为详细的分析了 Spring IOC 和 AOP 部分的源码,并写成了文章.为了让我的 Spring 源码分析系列文章更为丰富一些,所以从本篇文章开始,我将来向大家介绍一 ...
- Java线程池(ThreadPoolExecutor)原理分析与使用
在我们的开发中"池"的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 使用线程池的好处 1.降低资源消耗 可以重复利用 ...
- Servlet-生命周期简介
Servlet生命周期可分为5个步骤 加载Servlet.当Tomcat第一次访问Servlet的时候,Tomcat会负责创建Servlet的实例 初始化.当Servlet被实例化后,Tomcat会调 ...
- QC内部分享ppt
Quality Center是一个基于Web的测试管理工具,可以组织和管理应用程序测试流程的所有阶段,包括制定测试需求.计划测试.执行测试和跟踪缺陷.此外,通过Quality Center还可以创建报 ...
- 删除.svn 脱离svn版本控制器
1.for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn" 复制到记事本,将记事本保存为 ...
- Android应用系列:完美运行GIF格式的ImageView(附源码)
前言 我们都知道ImageView是不能完美加载Gif格式的图片,如果我们在ImageView中src指定的资源是gif格式的话,我们将会惊喜的发觉画面永远停留在第一帧,也就是不会有动画效果.当然,经 ...