当前位置: 代码网 > it编程>编程语言>Java > FastDFS实用笔记 (Docker 搭建环境 + 整合 SpringBoot)

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

2024年08月02日 Java 我要评论
PS:上述第二条规则有个例外,就是新增加一台 storage server 时,由已有的一台 storage server 将已有的所有数据(包括源头数据 和 备份数据)同步给新增服务器三、安装 FastDFS3.1 Linux 下安装 FastDFS安装 fastDFS 需要分别安装 fastdfs-nginx-module,fastdfs,nginx,libfastcommon先安装依赖环境,再安装 FastDFS3.2 Docker 安装 FastDFS。

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

三、安装 fastdfs

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

3.1 linux 下安装 fastdfs


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

安装参考文章

安装参考文章

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)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com