ps:上述第二条规则有个例外,就是新增加一台 storage server 时,由已有的一台 storage server 将已有的所有数据(包括源头数据 和 备份数据)同步给新增服务器
===========================================================================
安装 fastdfs 需要分别安装 fastdfs-nginx-module,fastdfs,nginx,libfastcommon
如果学了 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
======================================================================================
-
一台云服务器,用来提供 fastdfs 的 tracker 服务 和 storage 服务。提供服务的地址是 ip:8888
-
springboot 版本 2.3.4
ps:保证云服务器的 8888 端口(nginx 对外提供的端口),22122 端口,23000 端口都能相互访问
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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注java获取)

本次面试答案,以及收集到的大厂必问面试题分享:
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》
24年java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**[外链图片转存中…(img-zyhxmpbe-1713375575322)]
[外链图片转存中…(img-baoykpdr-1713375575322)]
[外链图片转存中…(img-ykjzzdiz-1713375575322)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注java获取)

本次面试答案,以及收集到的大厂必问面试题分享:
[外链图片转存中…(img-bwngejzh-1713375575323)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》
发表评论