FastDFS实践:恢复文件名与多分辨率存储技巧

需积分: 50 8 下载量 94 浏览量 更新于2024-09-08 收藏 26KB DOCX 举报
"FastDFS 是一个高效的文件分发系统,主要用于大规模分布式文件存储。本文主要分享两个实用的经验,一是关于文件下载时如何恢复原始文件名,二是处理多分辨率图片备份时的文件管理策略。 经验一:恢复FastDFS文件下载的原始文件名 在FastDFS中,文件上传后,存储服务器返回的文件索引(FID)中的文件名是基于FastDFS自定义的命名规则生成的,这与原始文件名不同。比如,"group2/M00/00/89/eQ6h3FKJf_PRl8p4AUz4wO8tqaA688.apk",这可能导致用户下载时体验不佳。FastDFS本身并不存储原始文件名且没有直接的恢复机制。 为解决这个问题,开发者需要采取以下步骤: 1. 上传文件成功时,应用程序需保存原始文件名和FID,例如存储在数据库中。 2. 用户请求下载时,通过Nginx服务器结合FID和自定义的URL参数(如attname)构造下载链接,如"http://121.14.161.48:9030/group2/M00/00/89/eQ6h3FKJf_PRl8p4AUz4wO8tqaA688.apk?attname=filename.apk",参数"attname"用于指定原始文件名。 3. 在Nginx配置中,设置HTTP响应头包含Content-Disposition,指示浏览器以参数中的名称显示文件,如"attachment;filename=$arg_attname"。 4. 浏览器接收到带有Content-Disposition的响应后,会正确显示指定的文件名,如"filename.apk"。 经验二:管理多分辨率图片备份 当需要为一个图片创建多个分辨率的备份时,可以利用FastDFS的文件ID关联功能。这里涉及的是主从文件的概念,即主文件是原始图片,而从文件是其缩略图版本。操作流程如下: 1. 首先上传主文件(即原始图片),获取主文件的FID。 2. 然后针对每个缩略图版本,使用相同的主文件名,添加特定的从文件后缀名和扩展名来创建从文件,如"main.jpg"变更为"main_Thumb.jpg"。 3. 通过FastDFS的文件ID结构,主文件ID通常包含主文件名和扩展名,而从文件ID则包含主文件名、从文件后缀名和扩展名,这样就实现了主文件与从文件的关联。 总结这两个经验,FastDFS虽然提供了强大的文件分发能力,但在实际应用中可能需要开发人员根据需求进行一些额外的处理,以提升用户体验和管理复杂文件关系。通过合理的配置和开发实践,可以充分利用FastDFS的优势,优化文件存储和访问过程。"
2017-01-11 上传
文本格式不能很好显示,请见谅(附件里有比较齐整的excel表格统计) 大小类型 传输类型 api方法 文件大小 花费时间 速率byte/ms 速率mb/s 缓存数组 次数 备注 大文件 下载 download_file(group_name, remote_filename, localFile) 1073741824(约1G) 28343ms 37883 36.12804413 无 1 下载 download_file(group_name, remote_filename , downloadStream) 1073741824(约1G) 29195ms 36778 35.07423401 0 1 fastDFS的DownloadStream,FileOutputStream 下载 download_file(group_name, remote_filename , downloadStream) 1073741824(约1G) 24352ms 44092 42.04940796 2K 1 fastDFS的DowloadStream,BufferedOutputStream 下载 download_file(group_name, remote_filename , DownloadCallback) 1073741824(约1G) 24831ms 43241 41.23783112 2K 1 实现DownloadCallback,BufferedOutputStream 下载 download_file(group_name, remote_filename , DownloadCallback) 1073741824(约1G) 25922ms 41422 39.50309753 8K 1 实现DownloadCallback,BufferedOutputStream 普通文件 下载 download_file(group_name, remote_filename, localFile) 59113472(约56M) 382ms 154747 147.5782394 无 1 下载 download_file(group_name, remote_filename , downloadStream) 59113472(约57M) 369ms 160199 152.7776718 0 1 fastDFS的DownloadStream,FileOutputStream 下载 download_file(group_name, remote_filename , downloadStream) 59113472(约58M) 499ms 118702 113.2030487 2K 1 fastDFS的DowloadStream,BufferedOutputStream 下载 download_file(group_name, remote_filename , DownloadCallback) 59113472(约59M) 592ms 99853 95.22724152 2K 1 实现DownloadCallback,BufferedOutputStream 下载建议:100M内数据使用fastDFS提供的DownloadStream;大于1G的数据,使用BufferedOutputStream和DowloadStream