fastdfs操作,基础知识, 分布式文件系统fastdfs

fastdfs概念图

在这里插入图片描述

fastdfs操作顺序

    fastdfs 安装
    
    //查询:
    docker search fastdfs
    
    //下载:
    docker pull season/fastdfs
    
   // 本机方式启动注册中心tracker:
   docker run -itd --name trakcer -v ~/tracker_data:/fastdfs/tracker/data --net=host season/fastdfs tracker
     默认启动22122端口
     
   //  禁用防火墙:
    vi /etc/sysconfig/selinux
    
   //重启虚拟机:
    reboot

防火墙禁用方法

在这里插入图片描述

启动仓库storage

   docker run -itd --name storage -v ~/storage_data:/fastdfs/storage/data -v ~/store_path:
   /fastdfs/store_path --net=host -e TRACKER_SERVER:192.168.1.2:22122 season/fastdfs storage

进入容器


	//进入容器:
	docker exec -it storage bash
	
	//查看配置:
	more storage.conf
	
	//复制出来,修改配置再考回去
	docker cp storage.conf:/fdfs_conf ~/
	
	//考回去
	docker cp ./storage.conf  storage:/fdfs_conf/
	
	//因为docker是精简版的系统,所以修改配置需要拷贝出来改好再复制回去
	

在这里插入图片描述
将ip修改为Linux系统Ip
重启storage:docker stop storage → docker start storage
再次进入storage容器 docker exec -it storage bash

确认配置是否修改成功

下图箭头为组名,默认group1,依次往上加,有组号说明tracker已启动

    fdfs_monitor fdfs_conf/storage.conf

在这里插入图片描述
》》测试文件上传
查看/usr/bin下的所有fdfs工具

[root@bogon fdfs]# ls /usr/bin | grep fdfs
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file  //上传文件

启动客户端

//启动容器
docker run -itd --name fdfs_sh --net=host season/fastdfs sh

//进入容器
docker exec -it sh bash

//创建文件赋值
a.txt: echo  dajiahao>a.txt

//进入目录
root@localhost:/#  cd fdfs_conf

//上传文件
root@localhost:/fdfs_conf#  fdfs_upload_file storage.conf /a.txt

//上传成功 返回的地址
group1/M00/00/00/wKiuglwGoJWARxYvAAAACZLaVGU072.txt  
//组名/地址/保证安全的随机名字.后缀名

命令下载

	下载文件到本地(fdfs_download_file <config_file> <file_id> [local_filename][root@bogon 00]# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKiuglwGoJWARxYvAAAACZLaVGU072.txt ~/a.txt
	
	[root@bogon 00]# ll ~
	total 168836
	-rw-------. 1 root root      2913 Apr  5  2016 anaconda-ks.cfg
	-rw-r--r--  1 root root        13 Sep  7 20:35 a.txt
	-rw-r--r--  1 root root        13 Sep  7 20:46 bb.tx

删除文件(fdfs_delete_file <config_file> <file_id>)

   [root@bogon 00]# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKiuglwGoJWARxYvAAAACZLaVGU072.txt
    #删除了该文件 还可以查看到它的信息
    [root@bogon 00]# fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKiuglwGoJWARxYvAAAACZLaVGU072.txt
   
    source storage id: 0
    source ip address: 192.168.58.146
    file create timestamp: 2017-09-07 20:37:19
    file size: 13
    file crc32: 2430562586 (0x90DF711A)
    
    #再次尝试删除 发现报错文件不存在
    [root@bogon 00]# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKiuglwGoJWARxYvAAAACZLaVGU072.txt
    [2017-09-07 20:48:23] ERROR - file: tracker_proto.c, line: 48, server: 192.168.58.146:23000, response status 2 != 0
    delete file fail, error no: 2, error info: No such file or directory

java代码 上传下载:

pom文件

 <dependencies>
     <dependency>
         <groupId>com.luhuiguo</groupId>
         <artifactId>fastdfs-spring-boot-starter</artifactId>
         <version>0.2.0</version>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-jdbc</artifactId>
     </dependency>
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
     </dependency>
 </dependencies>

controller层

package cn.ps.controll;

@RestController
public class UploadControll {
    @Autowired
    JdbcTemplate jt;
    @Autowired
    FastFileStorageClient ffsc;

    @PostMapping("/up") //上传文件
    public String upload(@RequestParam MultipartFile myfile) throws IOException {
        String extname = FilenameUtils.getExtension(myfile.getOriginalFilename());
        StorePath group1 = ffsc.uploadFile("group1",myfile.getInputStream(), myfile.getSize(),extname);
        String sql="insert into filenametable (filename,groupname,filepath) values (?,?,?)";
        jt.update(sql,myfile.getOriginalFilename(),group1.getGroup(),group1.getPath());
        return group1.getFullPath();
    }

    //下载文件
    @Autowired
    FastFileStorageClient storageClient;
    @GetMapping("/down/{fileid}")
    public void download(@PathVariable String fileid, HttpServletResponse resp) throws IOException {
        List query = jt.query("select * from filenametable where fileid="+fileid ,new ColumnMapRowMapper() );
        Map map=(Map)query.get(0);
        String filename = URLEncoder.encode(map.get("filename").toString(),"UTF-8");
        String groupname =  map.get("groupname").toString();
        String filepath =map.get("filepath").toString();
        resp.setHeader("Content-Disposition","attachment;filename="+filename);
        byte [] byt=storageClient.downloadFile(groupname,filepath);
        resp.getOutputStream().write(byt);
    }
}

html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>upload</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="up">
    文件:<input type="file" name="myfile" >
    <input type="submit" value="上传">
</form>

   <a href="down/1">下载</a>

</body>
</html>

配置文件application.yml

fdfs:
  connect-timeout: 10000 # 连接超时时间
  so-timeout: 5000  # 响应超时时间
  tracker-list:
  - 192.168.174.130:22122 #linux系统 docker运行地址
server:
  port: 8899 # window 端口
spring:
  datasource: # 数据库连接
    url: jdbc:mysql://192.168.0.250/school
    password: ps123456
    username: root
    driver-class-name: com.mysql.jdbc.Driver
  http:
    multipart:
      max-file-size: 10485760 # 内存大小,单位byte
返回数组 返回两个参数 第一个是存储的组名 第二是 图片的路径

组名/地址/随机名/后缀名

group1/M00/00/00/wKiuglwGsX-Aa62AAACf_PEcWVI803.png

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值