第一部分:在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. javascript(作业九)

    1.javascript简介: JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端 ...

  2. 桌面应用开发之WPF页面导航

    先看效果图 Get Start   为了项目解耦,使用mvvmlight框架.MVVM设计模式请自行了解. 1 新建项目   新建一个MvvmLight(WPF)项目,删除其中无关文件夹:Design ...

  3. jupyter Notebook环境搭建

    1.什么是jupyter notebook jupyter notebook是一种 Web 应用,能让用户将说明文本.数学方程.代码和可视化内容全部组合到一个易于共享的文档中.它可以直接在代码旁写出叙 ...

  4. Gitlab配置、备份、升级、迁移

    0.Gitlab安装 1.安装和配置必要的依赖关系 在CentOS7,下面的命令将在系统防火墙打开HTTP和SSH访问. yum install curl openssh-server postfix ...

  5. day12_雷神_线程总结

    #线程 1. 多线程理论 0.进程只是一个资源单位,用来隔离资源,从执行角度是主线程. 1.多个线程共享一个进程的数据资源: 2.线程开销小: 2. 开线程的两种方式 0. 站在资源的角度,主进程:执 ...

  6. UITableView自动计算cell高度并缓存

    原文链接:http://www.jianshu.com/p/64f0e1557562 cell高度计算的历史 在iOS8之前,如果UITableViewCell的高度是动态的,如果想要显示正确的话,我 ...

  7. Flask 中的路由系统

    基本用法 Django的路由系统url集中在一起,而Flask的路由系统以装饰器的形式装饰在视图上如: @app.route("/",methods=["GET" ...

  8. javascript知识整理之this

    js中的this是一个头疼的问题,尤其对于笔者这种初级的菜鸟来讲,下面梳理下this的知识,可以当做是初级进阶也好入门也罢,总归输出的才是自己掌握的: Js中this不是由词法作用域决定的 而是调用时 ...

  9. MySQL slow_log日志表出现非法字段值

    背景 从mysql.slow_log 获取慢查询日志很慢,该表是csv表,没有索引. 想添加索引来加速访问,而csv引擎不能添加索引(csv引擎存储是以逗号分割的文本来存储的),只能改存储引擎来添加索 ...

  10. Python模块——logging模块

    logging模块简介 logging模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统.logging模块是Python的一个标准库模块, 由标准库模块提供日志记录API的关键好处是 ...