fastdfs

本文详细介绍FastDFS在Linux系统上的部署步骤,包括环境准备、Tracker与Storage服务器配置及关联,以及通过Docker容器实现快速部署。同时,文章还演示了文件上传、下载流程,并提供了Spring Cloud环境下使用FastDFS的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fastdfs 分布式文件系统(高可用)linux系统上操作

yum install net-tools -y (安装)查看端口进程插件

编程模型:
文件在文件系统存储的格式
先进行分组 组名:group,(如果不给group名字,他会按照group1,gruop2…来分)
如果某几个storage服务器是相同的组名 表示这些服务器是互为主从(备份)

每一个Storage服务器都有一个主从,用来备份
文件格式:
M数字/数字/文件

分布式系统的概念用多台机器存储文件

Tracker服务器(Storage服务器会自动注册到Tracker服务器上)
功能:
1.判断有哪些存储服务器(借鉴注册中心的思路)
2.判断哪个存储服务器空间较大
3.判断资源文件所在的存储服务器(路由)
Storage服务器

建立Tracker服务器和Storage服务器的关联
docker pull season/fastdfs
systemctl stop firewalld
vi /etc/sysconfig/selinux
reboot
docker run -ti -d --name trakcer -v ~/tracker_data:/fastdfs/tracker/data --net=host

season/fastdfs tracker
docker run -tid --name storage -v ~/storage_data:/fastdfs/storage/data -v

~/store_path:/fastdfs/store_path --net=host -e TRACKER_SERVER:192.168.115.130:22122

-e GROUP_NAME=mygroup season/fastdfs storage
docker cp storage:/fdfs_conf/storage.conf ~/
vi ~/storage.conf
docker cp ~/storage.conf storage:/fdfs_conf/
docker stop storage
docker start storage
docker exec -it storage bash
cd fdfs_conf
fdfs_monitor storage.conf

docker	
										

容器启动

默认端口:22122

1.hub.docker.com
2.搜索fastdfs
docker search fastdfs
3.选择第一个
4.进入linux,命令:docker pull season/fastdfs
5.systemctl stop firewalld		关闭防火墙
6.find / -name selinux
7.vi /etc/sysconfig/selinux
8.更改为disabled,然后保存退出	
9.reboot			重启	
10.service docker start
11.docker run -ti -d --name trakcer -v ~/tracker_data:/fastdfs/tracker/data 

–net=host season/fastdfs tracker
12.netstat -aon | grep 22122 查看端口
13.docker run -tid --name storage -v ~/storage_data:/fastdfs/storage/data -v

~/store_path:/fastdfs/store_path --net=host -e TRACKER_SERVER:192.168.115.130:22122

-e GROUP_NAME=group2 season/fastdfs storage

	测试
1.docker exec -it trakcer bash
2.ls
3.cd fdfs_conf
4.ls
5.fdfs_monitor storage.conf
6.会发现刚才开启的两个容器没有关联
7.exit
8.docker exec -it storage bash
9.ls
10.cd fdfs_conf
11.ls
12.more storage.conf
13.exit
14.docker cp storage:/fdfs_conf/storage.conf ~/
15.cd ~
16 vi storage.conf  更改为自己的linux系统的ip
17。docker cp ~/storage.conf storage:/fdfs_conf/
18.docker stop storage
19.docker start storage
20.docker exec -it storage bash
21.cd fdfs_conf
22.fdfs_monitor storage.conf

上传文件
1.docker run -ti --name fdfs_sh --net=host season/fastdfs sh

开启一个客户端
2.echo hello>a.txt
3.cd fdfs_conf
4.ls
5.more storage.conf
6.exit
7.docker cp ~/storage.conf fdfs_sh:/fdfs_conf/
8.docker start fdfs_sh
9.docker exec -it fdfs_sh bash
10.ls
11.cd fdfs_conf
12.fdfs_upload_file storage.conf /a.txt
13.exit
14.cd store_path
15.cd data
16.ls
根据地址来进入:group1/M00/00/00/wKhzg1wGc8eANAXqAAAABncc3SA635.txt
17.cd 00
18.cd 00
19.ls
会发现:wKhzg1wGc8eANAXqAAAABncc3SA635.txt
cd ~/store_path/data/

group1/M00/00/00/wKhzg1wGc8eANAXqAAAABncc3SA635.txt

3.fdfs_upload_file			

语法:首先指定一个配置文件 然后是本地要上传的文件

java代码上传
1.网址:https://github.com/search?q=fastdfs_client
2.网址:https://github.com/luhuiguo/fastdfs-client
1.创建模块 SPRINGCLOUD_FASTDFS
2.加入依赖

org.springframework.boot
spring-boot-starter-web


com.luhuiguo
fastdfs-spring-boot-starter
0.2.0

3.添加资源文件 application.yml
server:
port: 8899
fdfs:

连接Tracker服务器超时时间:

connect-timeout: 10000

响应的超时时间

so-timeout: 3000

storage服务器的元素

tracker-list:
- 192.168.115.131:22122
4.模拟一个文件上传
创建一个upload.html文件
创建一个controller层
5.建立一张表
6.配置数据的依赖和四要素

@RestController
public class Upload {
    @Autowired
    protected FastFileStorageClient storageClient;
    @Autowired
    JdbcTemplate jdbc;
    @PostMapping("/fuload")//上传
    public String upload(@RequestParam("myFile1")MultipartFile myFile) throws IOException {
        String ext= FilenameUtils.getExtension(myFile.getOriginalFilename());
        StorePath sp=storageClient.uploadFile("mygroup",myFile.getInputStream(),myFile.getSize(),ext);
        String sql="insert into file(filename,groupname,filepath) values (?,?,?)";
        jdbc.update(sql,myFile.getOriginalFilename(),sp.getGroup(),sp.getPath());
        return sp.getFullPath();
    }

    @GetMapping("/fdown")//下载
    public void download( @RequestParam("id") String id, HttpServletResponse response) throws IOException {
       List list = jdbc.query("select * from file where fileid="+id,new ColumnMapRowMapper());

       Map map=(Map)list.get(0);
       String fileName= URLEncoder.encode(map.get("filename").toString(),"UTF-8");
        String group=map.get("groupname").toString();
        String path=map.get("filepath").toString();
        response.setHeader("Content-Disposition","attachment;filename="+fileName+"");
        byte[] bytes = storageClient.downloadFile(group, path);
        response.getOutputStream().write(bytes);
    }
}

// MultipartFile是用来接收上传的文件
// myFile的名字必须和上传的表单的名字一样
// group1:指组名
// myFile.getInputStream():指这个文件中的输入流
// myFile.getSize():文件的大小
// myFile.getOriginalFilename():取到文件的名字
// FilenameUtils.getExtension(""):取到一个文件的后缀名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值