返回信息
-
一、组名:文件上传后所在storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
-
二、虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
-
三、数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。 : 四、文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
FASTDFS FileID信息
补充
-
合并存储:
FastDFS提供的合并存储功能,默认创建的
大文件 为64MB,然后在该大文件中存储很多小文件。大文件中容纳一个小文件的空间称为一个Slot,规定Slot最小值为256字节,最大为16MB,也就是小于256字节的文件也需要占用256字节,超过16MB的文件不会合并存储而是创建独立的文件。
合并存储配置:
FastDFS提供了合并存储功能的实现,所有的配置都在tracker.conf文件之中,具体摘录如下:trunk功能启动与配置:通过tracker.conf文件启动与配置,多个配置项如下:
use_trunk_file = true #是否启用trunk存储, 默认:false不开启,true是开启 slot_min_size= 256 #单位:bytes,trunk文件最小分配单元,小于this的也会花费256bytes存储 slot_max_size = 1MB #trunk内部存储的最大文件,超过该值会被独立存储,默认16MB trunk_file_size = 64MB #trunk文件大小 trunk_create_file_advance = false #是否预先创建trunk文件 trunk_create_file_time_base = 02:00 #预先创建trunk文件的基准时间 trunk_create_file_interval = 86400 #预先创建trunk文件的时间间隔 trunk_create_file_space_threshold = 20G #trunk创建文件的最大空闲空间 trunk_init_check_occupying = false #启动时是否检查每个空闲空间列表项已经被使用 trunk_init_reload_from_binlog = false #是否纯粹从trunk-binlog重建空闲空间列表 trunk_compress_binlog_min_interval = 0 #对trunk-binlog进行压缩的时间间隔
注:采用合并存储后的大文件统称为Trunk文件,没有合并存储的文件统称为源文件;
-
注意区分三个概念:
1)Trunk文件:storage服务器磁盘上存储的实际文件,默认大小为64MB
2)合并存储文件的FileId:表示服务器启用合并存储后,每次上传返回给客户端的FileId,注意此时该FileId与磁盘上的文件没有一一对应关系;
3)没有合并存储的FileId:表示服务器未启用合并存储时,Upload时返回的FileID,fileid 采用 Base64 url编码。
1、存储文件命名与文件结构
-
向FastDFS上传文件成功时,服务器返回该文件的存取ID叫做fileid,当没有启动合并存储时该fileid和磁盘上实际存储的文件一一对应,当采用合并存储(trunk存储)时就不再一一对应而是多个fileid对应的文件被存储成一个大文件。
Trunk文件文件名格式:fdfs_storage1/data/00/00/000001 文件名从1开始递增,类型为int; 源文件文件名格式 :group2/M07/00/1F/rBABtGIfljmACwDjAAC5ERGBk_A347.png
2、没有合并存储的fileid
-
文件名(不含后缀名)采用Base64编码,包含如下5个字段(每个字段均为4字节整数)
group2/M07/00/1F/rBABtGIfljmACwDjAAC5ERGBk_A347.png
-
文件名中,除了.png 为文件后缀,rBABtGIfljmACwDjAAC5ERGBk_A347 这部分是一个base64编码缓冲区,组成如下:
storage_id(ip的数值型)源storage server ID或IP地址
timestamp(文件创建时间戳)
file_size(若原始值为32位则前面加入一个随机值填充,最终为64位)
crc32(文件内容的检验码)
随机数 (引入随机数的目的是防止生成重名文件)
rBABtGIfljmACwDjAAC5ERGBk_A347
| 4bytes | 4bytes | 8bytes |4bytes | 2bytes |
| ip | timestamp | file_size |crc32 | 校验值 |
3、获取FiledID信息
- 查看文件信息
# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf 2-14.png
group2/M07/00/1F/rBABtGIfljmACwDjAAC5ERGBk_A347.png
# /usr/bin/fdfs_file_info /etc/fdfs/client.conf group2/M07/00/1F/rBABtGIfljmACwDjAAC5ERGBk_A347.png
source storage id: 0
source ip address: 172.16.0.1
file create timestamp: 2022-03-02 16:07:21
file size: 47377
file crc32: 293704688 (0x118193F0)
- Java获取文件ID信息
FileInfo f2 = storageClient.get_file_info("group2", "M07/00/1F/rBABtGIfljmACwDjAAC5ERGBk_A347.png");
LOG.info(f2.toString());
byte[] fileId = StorageClient.base64.decodeAuto("rBABtGIfljmACwDjAAC5ERGBk_A347".substring(27));
int trunkID = ProtoCommon.buff2int(fileId, 0);
LOG.info("trunk ID:{}", trunkID);
int offset = ProtoCommon.buff2int(fileId, 4);
LOG.info("offset:{}", offset);
int alloc_size = ProtoCommon.buff2int(fileId, 8);
LOG.info("alloc_size:{}", alloc_size);
或者
fastdfs_get_file_info(string group_name, string file_id)
返回结果示例:
source storage id: 0
source ip address: 172.16.89.162
file create timestamp: 2016-11-10 11:26:32
file size: 111831
file crc32: 3676413605 (0xDB219EA5)
|