SpringBoot项目整合FastDFS+Nginx实现图片上传功能

目录
  • FastDFS概述
  • Fastdfs原理
  • 安装Fastdfs
  • 整合Nginx模块
  • 安装Nginx
  • SpringBoot整合Fastdfs

FastDFS概述

  • FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
  • FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
  • FastDFS由阿里资深架构师余庆开发。

Fastdfs原理

FastDFS包含Tracker Server和Storage Server; 客户端请求Tracker Server进行文件的上传与下载; Tracker Server调度Storage Server最终完成上传与下载。

  • Tracker (追踪者)

    • 作用是负载均衡和调度,它管理着存储服务(Storage Server),可以理解为:“大管家,追踪者,调度员”;
    • Tracker Server可以集群,实现高可用,策略为“轮询”。
  • Storage (贮存器)
    • 作用是文件存储,客户端上传的文件最终存储到storage服务器上;
    • storage集群采用分组的方式,同组内的每台服务器是平等关系,数据同步,目的是实现数据备份,从而高可用,而不同组的服务器之间是不通信的;
    • 同组内的每台服务器的存储量不一致的情况下,会选取容量最小的那个,所以同组内的服务器之间软硬件最好保持一致。
    • Storage Server会连接集群中的所有Tracker Server,定时向他们汇报自己的状态,例如:剩余空间,文件同步情况,文件上传下载次数等信息。

上传文件流程

查询文件流程

安装Fastdfs

1、安装gcc

yum install -y gcc gcc-c++

2、下载libfastcommon到/usr/local下

cd /usr/local
wget https://github.com/happyfish200/libfastcommon/archive/V1.0.7.tar.gz

3、解压libfastcommon

tar -zxvf V1.0.7.tar.gz
cd libfastcommon-1.0.7

4、安装libfastcommon

./make.sh
./make.sh install

5、下载fastdfs

wget https://github.com/happyfish200/fastdfs/archive/V5.05.tar.gz

6、解压fastdfs并安装

tar -zxvf V5.05.tar.gz
cd fastdfs-5.05/
./make.sh
./make.sh install

7、将conf目录下的所有文件复制到/etc/fdfs/

cp /usr/local/fastdfs-5.05/conf/* /etc/fdfs/

8、配置tracker

cd /etc/fdfs
vi tracker.conf

主要配置

#端口号
port=22122
#基础目录(Tracker运行时会向此目录存储storage的管理数据)
base_path=/usr/local/fastdfs   

如果base_path不存在,则需要创建目录

mkdir /usr/local/fastdfs

9、配置storage

cd /etc/fdfs
vi storage.conf

主要配置

#配置组名
group_name=group1
#端口
port=23000
#向tracker心跳间隔(秒)
heart_beat_interval=30
#基础目录,目录不存在,需要自行创建
base_path=/usr/local/fastdfs
#存放文件的位置,目录不存在,需要自行创建
store_path0=/usr/local/fastdfs/fdfs_storage
#配置tracker服务器:IP
tracker_server=192.168.31.168:22122

10、启动服务 启动tracker

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

启动storage

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

查看服务

netstat -ntlp

整合Nginx模块

1、上传fastdfs-nginx-module_v1.16.tar.gz 到/usr/local 2、解压nginx模块

tar -zxvf fastdfs-nginx-module_v1.16.tar.gz

3、修改config文件,将文件中的 /usr/local/ 路径改为 /usr/

cd /usr/local/fastdfs-nginx-module/src
vi config

4、将fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs下

cp mod_fastdfs.conf /etc/fdfs/

5、修改/etc/fdfs/mod_fastdfs.conf

vi /etc/fdfs/mod_fastdfs.conf
内容:
base_path=/usr/local/fastdfs
tracker_server=192.168.31.168:22122
#url中包含group名称
url_have_group_name=true
#指定文件存储路径(上面配置的store路径)
store_path0=/usr/local/fastdfs/fdfs_storage  

6、将libfdfsclient.so拷贝至/usr/lib下

cp /usr/lib64/libfdfsclient.so /usr/lib/

7、创建nginx/client目录

mkdir -p /var/temp/nginx/client

安装Nginx

1、 将nginx-1.8.0.tar.gz上传到/usr/local 2、解压:tar -zxvf nginx-1.8.0.tar.gz 3、安装依赖库

yum install pcre
yum install pcre-devel
yum install zlib
yum install zlib-devel
yum install openssl
yum install openssl-devel

4、进入nginx解压的目录下:

cd /usr/local/nginx-1.8.0

5、安装

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/usr/local/fastdfs-nginx-module/src

编译、安装

make
make install

安装成功 6、拷贝配置文件http.conf和mime.types

cd /usr/local/fastdfs-5.0.5/conf
cp http.conf mime.types /etc/fdfs/

7、修改nginx配置文件

cd /usr/local/nginx/conf/
vi nginx.conf

8、关闭nginx,并启动nginx

pkill -9 nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

9、启动nginx

SpringBoot整合Fastdfs

1、创建SpringBoot项目 2、引入依赖

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-thymeleaf</artifactId>
 </dependency>
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
     <groupId>com.github.tobato</groupId>
     <artifactId>fastdfs-client</artifactId>
     <version>1.26.4</version>
 </dependency>

3、启动类上配置

@Import(FdfsClientConfig.class)
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)

4、配置文件

fdfs.so-timeout=3000
fdfs.connect-timeout=1000
fdfs.thumb-image.height=60
fdfs.thumb-image.width=60
fdfs.tracker-list=192.168.31.168:22122

5、控制器

@Controller
public class UploadController {
    public static final String DIR = "http://192.168.31.168/";
    @Autowired
    private FastFileStorageClient client;
    @RequestMapping("login")
    public String login(){
        return "login";
    }
    @ResponseBody
    @RequestMapping(value = "/upload",method = RequestMethod.POST)
    public JsonResult upload(MultipartFile file) throws IOException {
        //获得后缀名
        String extension = FilenameUtils.getExtension(file.getOriginalFilename());
        //上传
        StorePath storePath = client.uploadFile(file.getInputStream(), file.getSize(), extension, null);
        System.out.println("save:" + storePath.getFullPath());
        return new JsonResult(1,DIR + storePath.getFullPath());
    }
}

Java对象

public class JsonResult {
    private Integer code;
    private Object data;
    //get/set/constructor
 }

6、测试页面 页面使用了Vue+ElementUI

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>上传</title>
    <link rel="stylesheet" href="/elementui/index.css" rel="external nofollow"   >
    <style>
       ...
    </style>
</head>
<body>
    <div id="app">
        <el-card >
            <el-upload
                    class="avatar-uploader"
                    action="/upload"
                    :show-file-list="false"
                    :on-success="handleAvatarSuccess">
                <img v-if="imageUrl" :src="imageUrl" class="avatar">
                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
            </el-upload>
        </el-card>
    </div>
    <script src="/vue/vue.js"></script>
    <script src="/elementui/index.js"></script>
    <script>
        new Vue({
            el:"#app",
            data(){
                return{
                    imageUrl: ''
                }
            },
            methods:{
                handleAvatarSuccess(res, file) {
                    console.log(res);
                    this.imageUrl = res.data;
                }
            }
        })
    </script>
</body>
</html>

上传效果

到此这篇关于SpringBoot项目整合FastDFS+Nginx实现图片上传的文章就介绍到这了,更多相关SpringBoot整合FastDFS+Nginx内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot集成阿里云OSS图片上传

    简述 最近做的公司项目,图片比较多,不想给其存储到自己服务器上,就买了阿里云的OSS服务器来哦进行存储,其实集成第三方平台,一般没什么难度,当然,你要仔细看对方的API文档,这篇主要说一下个人集成OSS的过程 步骤 1.pom.xml中添加OSS的SDK <!-- 图片上传 SDK 阿里云oss --> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-os

  • SpringBoot整合FastDFS方法过程详解

    一.pom.xml <?xml version="1.0" encoding="UTF-8"?> <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

  • 图解Springboot集成七牛云并实现图片上传功能过程

    七牛云的使用 1.进入官网,注册一个账号 2.找到对象存储 3.新建存储空间 4.管理存储空间 5.到此基本操作就完成了,接下来我们要在项目中使用 方式一:官方的帮助文档,很详细: 步骤一:找到开发者中心 步骤二:选择对象存储 步骤三:找到Java的SDK 可以看到我们的官网非常详细! 方式二:这里给大家封装好了一个工具类,maven项目可以直接用 官网是静态工具类,这里是注入到IOC容器当中! 1.导入pom依赖 <dependency> <groupId>com.qiniu&l

  • SpringBoot集成FastDFS+Nginx整合基于Token的防盗链的方法

    为什么要用SpringBoot? SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. 创建独立的Spring应用程序 嵌入的Tomcat,无需部署WAR文件 简化Maven配置 自动配置Spring 提供生产就绪

  • Springboot集成fastDFS配置过程解析

    配置文件 配置fdfs_client.conf配置文件 # 连接超时时间,针对socket套接字函数connect,默认为30秒 connect_timeout=30000 # 网络通讯超时时间,默认是60秒 network_timeout=60000 tracker_server = 47.98.159.15:22122 导入依赖 <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs

  • SpringBoot 文件或图片上传与下载功能的实现

    导入依赖(pom.xml) <!-- 上传下载需要设计到的jar包 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>commons-fileu

  • SpringBoot项目整合FastDFS+Nginx实现图片上传功能

    目录 FastDFS概述 Fastdfs原理 安装Fastdfs 整合Nginx模块 安装Nginx SpringBoot整合Fastdfs FastDFS概述 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务,如相册网站.视频网站等等. FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用Fa

  • 实例详解SpringBoot+nginx实现资源上传功能

    最近小编在学习使用nginx放置静态资源,例如图片.视频.css/js等,下面就来记录一下一波学习干货. 1.nginx安装及配置 小编使用的服务器是阿里云的轻量应用服务器,系统使用的是Ubuntu.注意记得开放 9090TCP端口,如果不使用 9090端口作为服务器端口也可不用. 安装 首先,获取安装包是必要的吧,这里提供一个nginx-1.11.3-ubuntu.tar.gz https://pan.baidu.com/s/1vvb41QkOJ4VqfyFckXBkjA (密码45wz) 小

  • 详解SpringBoot项目整合Vue做一个完整的用户注册功能

    目录 前言 1 实现用户注册流程 1.1 用户注册完整流程 1.2 用户注册信息及校验 2 后台接口设计 2.1 上传头像接口 2.2 用户注册接口 3 后端代码实现 3.1 用户头像上传接口编码实现 3.2 用户注册接口 4 前端代码实现 4.1 完成用户注册界面vue组件编码 4.2 工具类中增加校验方法 4.3 API文件中添加用户注册方法 4.4 全局方法中添加用户注册方法 4.5 路由列表中添加用户注册组件 4.6 登录组件中添加用户注册的跳转链接 4.7 路由跳转控制中添加白名单 5

  • Thinkphp整合阿里云OSS图片上传实例代码

    Thinkphp3.2整合阿里云OSS图片上传实例,图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了 首先引入阿里云OSS类库 <?php namespace Home\Controller; use Think\Controller; use OSS\Core\OssException; vendor('aliyun.autoload'); 上传图片自己写,上传成功到阿里云后,删除临时文件 function aliyun() {

  • java使用CKEditor实现图片上传功能

    java如何使用CKEditor实现图片上传功能,具体内容如下 1.根据实际需要下载指定的CKEditor 2.删除文件ckeditor/plugins/image/dialogs/image.js预览框中文本内容,并修改hidden属性值为显示上传选项卡 删除image.js中包含在双引号中的上述文本 将image.js中的hidden属性值改为0 3.修改ckeditor/config.js文件,配置"上传到服务器"按钮调用的controller接口 4."上传到服务器&

  • 微信小程序基于腾讯云对象存储的图片上传功能

    在使用腾讯云对象存储之前,公司一直使用的是传统的FTP的上传模式,而随着用户量的不断增加,FTP所暴露出来的问题也越来越多,1.传输效率低,上传速度慢.2.时常有上传其他文件来攻击服务器,安全上得不到保障.所以我们在经过慎重考虑觉得使用第三方的云存储服务. 在最开始的时候我们在腾讯云与阿里云中选择,最终我们选择腾讯云,腾讯云在文件上传用时方面的性能比较突出,文件越大表现越好:在下载用时方面表现略优于阿里云:文件删除用时方面总体速度略逊于,但在不同大小文件删除用时上都比较稳定.当然这与我们主要用于

  • 详解vue 图片上传功能

    这次做了vue页面的图片上传功能,不带裁剪功能的! 首先是html代码,在input框上添加change事件,如下: <ul class="clearfix"> <li v-if="imgs.length>0" v-for='(item ,index ) in imgs'> <img :src="item"> </li> <li style="position:relative

  • iOS实现压缩图片上传功能

    本文实例为大家分享了iOS实现压缩图片上传功能,供大家参考,具体内容如下 #pragma mark - 打开相机 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{ UIImage *image = info[UIImagePickerControllerOriginalImage]; s

  • 使用express+multer实现node中的图片上传功能

    下文给大家介绍使用express+multer实现node中的图片上传功能,具体内容介绍如下所示: 在前端中,我们使用ajax来异步上传图片,使用file-input来上传图片,使用formdata对象来处理图片数据,post到服务器中 在node中使用multer中间件来对上传路由接口进行处理 multer文档 package.json html部分 <body> <div class="form-group"> <label>File input

  • vue中利用simplemde实现markdown编辑器(增加图片上传功能)

    前言 最近在搭个人博客网站,需要一个 markdown 编辑器,来进行博客的编写 看了网上的教程,决定使用 simplemde 以为可以直接能拿来用的 不过实际运用的时候发现还是有要完善的地方 比如令人头疼的图片上传 最终效果 安装及初始化 npm install simplemde --save 在html中加入一个textarea <textarea id="simplemde"></textarea> 在vue的生命周期函数 mounted 中,添加 si

随机推荐