安装Fastdfs#SpringBoot整合Fastdfs

 

1.Fastdfs原理

 

FastDFS包含Tracker Server和Storage Server; 客户端请求Tracker Server进行文件的上传与下载; Tracker Server调度Storage Server最终完成上传与下载。 在这里插入图片描述

  • Tracker (追踪者)

    • 作用是负载均衡和调度,它管理着存储服务(Storage Server),可以理解为:“大管家,追踪者,调度员”;

    • Tracker Server可以集群,实现高可用,策略为“轮询”。

  • Storage (贮存器)

    • 作用是文件存储,客户端上传的文件最终存储到storage服务器上;

    • storage集群采用分组的方式,同组内的每台服务器是平等关系,数据同步,目的是实现数据备份,从而高可用,而不同组的服务器之间是不通信的;

    • 同组内的每台服务器的存储量不一致的情况下,会选取容量最小的那个,所以同组内的服务器之间软硬件最好保持一致。

    • Storage Server会连接集群中的所有Tracker Server,定时向他们汇报自己的状态,例如:剩余空间,文件同步情况,文件上传下载次数等信息。

上传文件流程 在这里插入图片描述 查询文件流程 在这里插入图片描述

2.安装Fastdfs

1、安装gcc

yum install -y gcc gcc-c++

2、下载libfastcommon到/usr/local下

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

3、解压libfastcommon

tar -zxvf V1.0.7.tar.gz
cd libfastcommon-1.0.7
​
如果是zip需要安装unzip命令
yum install -y gcc gcc-c++
unzip xxxxx.zip

4、安装libfastcommon

./make.sh
./make.sh install

5、下载fastdfs

wget https://github.com/happyfish100/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/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

在这里插入图片描述

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">
    <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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值