fdfs-文件上传信息返回详情

返回信息

在这里插入图片描述

一、组名:文件上传后所在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信息
1) 查看文件信息

Usage: fdfs_file_info <config_file> <file_id>
fdfs_file_info /etc/fdfs/client.conf group2/M07/00/1F/rBABtGIfljmACwDjAAC5ERGBk_A347.png

# /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)
  1. Java获取文件ID信息
FileInfo f2 = storageClient.get_file_info("group2", "M07/00/1F/rBABtGIfljmACwDjAAC5ERGBk_A347.png");
LOG.info(f2.toString());
//rBABtGIfljmACwDjAAC5ERGBk_A347
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);

或者

/**
* 获取文件信息
*
 * param string group_name 文件所在的组名
* param string file_id 文件id(如: M07/00/1F/rBABtGIfljmACwDjAAC5ERGBk_A347.png)
*
* return array
*/
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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Java中的`base64`编码将字符串转换为字节数组,然后将字节数组转换为`MultipartFile`对象,以便使用FastDFS进行文件。下面是一个示例代码: ```java import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; import sun.misc.BASE64Decoder; import java.io.ByteArrayInputStream; import java.io.IOException; public class Base64ToMultipartFileUtil { public static MultipartFile base64ToMultipartFile(String base64String) throws IOException { BASE64Decoder decoder = new BASE64Decoder(); byte[] bytes = decoder.decodeBuffer(base64String); // 将字节数组转换为MultipartFile对象 MultipartFile multipartFile = new MockMultipartFile("file", "filename.jpg", "image/jpeg", new ByteArrayInputStream(bytes)); return multipartFile; } } ``` 在上面的示例代码中,`base64ToMultipartFile`方法接受一个Base64编码的字符串作为输入,并返回一个`MultipartFile`对象。你需要使用`sun.misc.BASE64Decoder`类来解码Base64字符串,然后将解码后的字节数组包装在`ByteArrayInputStream`中,并将其递给`MockMultipartFile`构造函数。 请注意,上述示例代码使用了Spring Framework的`MockMultipartFile`类来创建`MultipartFile`对象。如果你不使用Spring Framework,你可以自己实现一个类似的`MultipartFile`对象。 完成上述代码后,你就可以使用得到的`MultipartFile`对象调用FastDFS的文件接口来上文件了。具体的上过程和FastDFS的配置请参考相关文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值