第一部分:在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协议的文件传输服务器软件的更多相关文章

  1. 转:【专题十一】实现一个基于FTP协议的程序——文件上传下载器

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  2. 专题十一:实现一个基于FTP协议的程序——文件上传下载器

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  3. Tftp文件传输服务器(基于UDP协议)

    一个简单的UDP服务端与客户端 服务端: from socket import * #创建套接字 udp_server = socket(AF_INET,SOCK_DGRAM) msg_server ...

  4. 基于BT协议的文件分发系统

    基于BT协议的文件分发系统构成:    1.一个Web服务器:保存着种子文件    2.一个种子文件:保存共享文件的一些信息(文件名,文件大小    ,Tracker服务器地址,torrent为后缀) ...

  5. 基于HTTP协议下载文件的实现

    最近在开发文件下载的程序,该程序是基于HTTP开发的. 首先是了解了文件传输到客户端的大概格式,然后分析该格式,实现写入文件的功能. 自己构造的HTTP包如下: GET /*********.rar ...

  6. 用c++开发基于tcp协议的文件上传功能

    用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...

  7. C# FTP上传文件至服务器代码

    C# FTP上传文件至服务器代码 /// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo ...

  8. 四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享

    一.基于HTTPS协议的12306抢票软件设计与实现--实现效果 二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现-- ...

  9. FTP文件传输服务器原理

    FTP服务器,全称File Transfer Protocol Server,是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务.FTP,文件传输协议(File Transfer ...

随机推荐

  1. 1.8 新特性之 Lambda Expressions

    Lambda expressions are allowed only at source level 1.8 or above The target type of this expression ...

  2. noip第23课资料

  3. Java 线程使用注意事项

    事件处理线程说明 如果事件处理的逻辑能迅速完成,并且不会发起新的IO请求,比如只是在内存中记个标识,则直接在IO线程上处理更快,因为减少了线程池调度. 但如果事件处理逻辑较慢,或者需要发起新的IO请求 ...

  4. centos7系统下,配置学校客户端网络记录

    存在的情况 1.学校的网络客户端绑定了个人的电脑MAC地址.绑定了IP地址. 2.我有两台笔记本,一台用了4年多,想用这台(B)直接装centos7系统,然后新买的笔记本(A)做为经常用的,系统为wi ...

  5. 4.BeanPostProcessor 后处理Bean

     Bean种类 普通bean:之前操作的都是普通bean.<bean id="" class="A"> ,spring直接创建A实例,并返回 Fac ...

  6. kaldi的TIMIT实例二

    ============================================================================ MonoPhone Training & ...

  7. java visualVM(jconsole)远程监控服务器java进程

    1. JMX方式(jconsole也可通过此方式进行连接) jmx方式能监控到CPU信息,但无法使用visualVM的visualVM GC插件    jmx无密码方式 监控普通的java进程 . 设 ...

  8. JavaScript学习之路-为什么要学习JavaScript语法

    版权声明:未经博主允许不得转载 前言 为什么要学习JavaScript语法,没有理由,因为工作需要,也为了成为全栈,那现在还是好好努力学习吧! 发展 说实话,JavaScript很好学也很重要,也很容 ...

  9. ElasticSearch核心知识总结(二)

    如何超出扩容极限,以及如何提升容错性 primary&replica自动负载均衡,6个shared,3个primary,3个replica,随着机器扩容,会被均衡分配到多台机器上 6个shar ...

  10. Shell-17--break-exit-continue-shift

    echo -n 表示不换行 break 会退出当前循环 break 2 ,可以指定退出几层循环 continue 退出当次循环