FastDFS实用笔记 (Docker 搭建环境 + 整合 SpringBoot)

PS:上述第二条规则有个例外,就是新增加一台 storage server 时,由已有的一台 storage server 将已有的所有数据(包括源头数据 和 备份数据)同步给新增服务器

三、安装 FastDFS

===========================================================================

3.1 Linux 下安装 FastDFS


安装 fastDFS 需要分别安装 fastdfs-nginx-module,fastdfs,nginx,libfastcommon

先安装依赖环境,再安装 FastDFS

安装参考文章

安装参考文章

3.2 Docker 安装 FastDFS


如果学了 Docker ,我们使用 Docker 来安装就会简单很多

参考文章

下载

docker pull delron/fastdfs

查看镜像

docker images

构建 tracker 服务(跟踪服务器,实现任务调度的作用)

docker run -d --network=host --name tracker -v /root/tracker:/var/root delron/fastdfs tracker

构建 storage 容器(存储服务器,提供容量和备份服务),,这里storage容器需要依赖tracker服务,传入你的tracker服务的ip地址,端口默认是22122,ip地址也就是你宿主机的ip

docker run -d --network=host --name storage -e TRACKER_SERVER=139.196.43.98:22122 -v /root/storage:/var/root -e GROUP_NAME=group1 delron/fastdfs storage

docker ps

[root@VM-16-5-centos storage]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

e36862cc1e63 delron/fastdfs “/usr/bin/start1.sh …” 9 seconds ago Up 8 seconds storage

d3dfdfea80b7 delron/fastdfs “/usr/bin/start1.sh …” 2 minutes ago Up 2 minutes tracker

进入正在工作中的 storage 容器

docker exec -it storage /bin/bash

四、SpringBoot 整合 FastDFS

======================================================================================

4.1 环境准备


  1. 一台云服务器,用来提供 FastDFS 的 tracker 服务 和 storage 服务。提供服务的地址是 IP:8888

  2. SpringBoot 版本 2.3.4

PS:保证云服务器的 8888 端口(Nginx 对外提供的端口),22122 端口,23000 端口都能相互访问

4.2 编写 SpringBoot 程序


pom.xml 编写,主要依赖配置如下

org.springframework.boot

spring-boot-starter-web

com.github.tobato

fastdfs-client

1.26.5

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

junit-vintage-engine

application.yml 配置

spring:

application:

name: fastdfs-demo

servlet:

multipart:

max-file-size: 100MB # 最大支持文件大小

max-request-size: 100MB # 最大请求大小

enabled: true

fdfs:

so-timeout: 1500 # socket 连接时长

connect-timeout: 600 # 连接 tracker 服务器超时时长

这两个是你服务器的 IP 地址,注意 23000 端口也要打开,阿里云服务器记得配置安全组。tracker 要和 stroage 服务进行交流

tracker-list: 服务器公网IP:22122

web-server-url: 服务器公网IP:8888

pool:

jmx-enabled: false

生成缩略图

thumb-image:

height: 500

width: 500

server:

port: 80

Java 配置类,配置 FastDFS Client

package com.example.config;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.EnableMBeanExport;

import org.springframework.jmx.support.RegistrationPolicy;

/**

  • @Classname FastdfsConfiguration

  • @Description TODO

  • @Date 2021/1/23 22:27

  • @Created by CodingGorit

  • @Version 1.0

*/

@Configuration // 导入 FastDFS-Client 组件

@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING) // 解决 Jmx重复注册bean的问题

public class FastdfsConfiguration {

}

配置静态文件访问

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**

  • @Classname WebMvcConfig

  • @Description TODO

  • @Date 2021/1/23 22:55

  • @Created by CodingGorit

  • @Version 1.0

*/

@Configuration

public class WebMvcConfig implements WebMvcConfigurer {

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry

.addResourceHandler(“/static/**”)

.addResourceLocations(“classpath:/static/”);

}

}

前端页面编写 upload.html

文件上传测试

fastDFS 工具类

package com.example.util;

import com.github.tobato.fastdfs.domain.fdfs.StorePath;

import com.github.tobato.fastdfs.service.FastFileStorageClient;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Component;

import org.springframework.util.StringUtils;

import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

/**

  • @Classname FastdfsUtil

  • @Description TODO

  • @Date 2021/1/23 22:43

  • @Created by CodingGorit

  • @Version 1.0

*/

@Component

public class FastdfsUtil {

private static final Logger log = LoggerFactory.getLogger(FastdfsUtil.class);

@Resource

private FastFileStorageClient storageClient ;

/**

  • 上传文件

*/

public String upload(MultipartFile multipartFile) throws Exception{

String originalFilename = multipartFile.getOriginalFilename().

substring(multipartFile.getOriginalFilename().

lastIndexOf(“.”) + 1);

StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(

multipartFile.getInputStream(),

multipartFile.getSize(),originalFilename , null);

return storePath.getFullPath() ;

}

/**

  • 删除文件

*/

public String deleteFile(String fileUrl) {

if (StringUtils.isEmpty(fileUrl)) {

log.info(“fileUrl == >>文件路径为空…”);

return “文件路径不能为空”;

}

try {

StorePath storePath = StorePath.parseFromUrl(fileUrl);

storageClient.deleteFile(storePath.getGroup(), storePath.getPath());

} catch (Exception e) {

log.error(e.getMessage());

}

return “删除成功”;

}

/**

  • 下载文件

*/

}

控制器类

package com.example.controller;

import com.example.util.FastdfsUtil;

import org.springframework.lang.Nullable;

import org.springframework.util.StringUtils;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

/**

  • @Classname FileController

  • @Description TODO

  • @Date 2021/1/23 22:45

  • @Created by CodingGorit

  • @Version 1.0

*/

@RestController

public class FileController {

@Resource

private FastdfsUtil fastdfsUtil;

/**

  • 文件上传

*/

@RequestMapping(value = “/upload”,headers=“content-type=multipart/form-data”, method = RequestMethod.POST)

public Object uploadFile (@RequestParam(“file”) MultipartFile file){

String result ;

try{

String path = fastdfsUtil.upload(file) ;

if (!StringUtils.isEmpty(path)){

result = path ;

} else {

result = “上传失败” ;

}

} catch (Exception e){

e.printStackTrace() ;

result = “服务异常” ;

}

return result;

}

/**
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

本次面试答案,以及收集到的大厂必问面试题分享:

字节跳动超高难度三面java程序员面经,大厂的面试都这么变态吗?

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
24年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**[外链图片转存中…(img-ZyHxMPBE-1713375575322)]

[外链图片转存中…(img-BaOYKpDR-1713375575322)]

[外链图片转存中…(img-yKjZzDiZ-1713375575322)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

本次面试答案,以及收集到的大厂必问面试题分享:

[外链图片转存中…(img-BwNgEJzh-1713375575323)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FastDFS是一个开源的分布式文件系统,可以实现文件存储和查找。而Spring Boot是一个基于Spring Framework的快速开发框架。 在整合FastDFSSpring Boot时,我们可以使用Token来实现权限的控制和安全性。 首先,我们可以使用Spring Boot提供的Token机制来验证用户的身份。当用户登录时,系统会生成一个Token,并将其返回给客户端。客户端在后续的请求中,需要将Token放在请求头中进行验证。这可以防止未经授权的用户访问受限资源。 其次,我们可以将FastDFS与Token进行整合。当用户上传文件时,系统会生成一个唯一的Token,并将Token和文件的元数据存储在数据库中。在用户下载文件时,系统会验证Token的有效性,并根据Token从数据库中获取文件的元数据,然后使用FastDFS进行文件的查找和传输。这样可以确保只有拥有有效Token的用户才能下载文件,增加了系统的安全性。 还可以通过Token来限制用户的操作权限。对于不同的用户角色,可以分配不同的Token权限。比如,管理员可以进行文件的上传和删除操作,普通用户只能进行文件的下载操作。这样可以实现对系统资源的精细权限控制。 综上所述,通过整合FastDFSSpring Boot的Token机制,我们可以实现对文件系统的权限控制和安全性增强。用户通过验证Token来访问受限资源,同时根据Token的权限来限制用户的操作行为。这样能够提高系统的安全性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值