免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 35003 | 回复: 9
打印 上一主题 下一主题

[FastDFS] 关于使用FastDFS做图片及其缩略图存储的一点疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-17 10:54 |只看该作者 |倒序浏览
本帖最后由 yanjing5462 于 2012-09-17 10:59 编辑

问题:

1. 我用fastdfs_storage_upload_by_filename,先上传了一张图片,得到了filename=M00/00/00/wKgh8VBWiJuTMwLIALjDi6M68J4311.jpg和我预想的一样。

2. 之后我根据这个filename,调用fastdfs_storage_upload_slave_by_filename,得到了filename=M00/00/00/wKgh8VBWiJuTMwLIALjDi6M68J4311_200X200.JPG也和我预想的一样,到这里似乎非常完美。

3. 这时我登录storageServer查看,却发现M00/00/00/wKgh8VBWiJuTMwLIALjDi6M68J4311_200X200.JPG只是个快捷方式,链接到另外一个叫wKgh8VBWiJuB_OLnADAA3uL0470149.JPG的图片,这个图片其实就是我上传的那个缩略图。到这里,问题来了:我上传缩略图时,并没有返回wKgh8VBWiJuB_OLnADAA3uL0470149.JPG这个图片的任何信息,以后我怎么删除这个图片呢?

4. 本来想的挺好,storageServer上只产生2个文件,一个原图,一个缩略图,现在多了个快捷方式,之后查资料才弄明白,FastDFS不支持自定义filename,应该就是这个原因,才必须采用文件链接的方式。

功能展望:
FastDFS目前来看是个通用的文件存储服务,而我是用他做图片服务器,既然做图片服务器更需专业,那么有几点需要满足:

1. 原图和缩略图现在混在一起,最好能完全分开,开始打算用不同group来区分,了解group机制后发现,不行。
2. 最好取消文件链接的方式,比如使用fastdfs_storage_upload_slave_by_filename上传时,检查原图的filename是否存在,存在,就直接生成一个filename+extname的文件,不存在,就报主文件不存在的错误。这样既节省了磁盘索引,也免去客户端记录文件对应关系,只记录原图filename和group就可以了


图片上传代码:
  1. <?php
  2. $tracker = fastdfs_tracker_get_connection();

  3. if(!fastdfs_active_test($tracker))
  4. {
  5.         error_log("errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info());
  6.         exit(1);
  7. }
  8. $storage = fastdfs_tracker_query_storage_store();
  9. if(!$storage)
  10. {
  11.         error_log("errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info());
  12.         exit(1);
  13. }

  14. $original_file1 = "/data/tools/85542.jpg";
  15. $original_file2 = "/data/tools/IMG_0111.JPG";

  16. $original_uploaded_info = fastdfs_storage_upload_by_filename($original_file1, null, array(), null, $tracker, $storage);

  17. print_r($original_uploaded_info);

  18. if($original_uploaded_info)
  19. {
  20.         $group_name = $original_uploaded_info['group_name'];
  21.         $remote_filename = $original_uploaded_info['filename'];

  22.         $thumbnail_info = fastdfs_storage_upload_slave_by_filename($original_file2, $group_name, $remote_filename, '_200X200');

  23.         print_r($thumbnail_info);
  24. }
  25. ?>
复制代码
请求结果:
  1. Array
  2. (
  3.     [group_name] => group1
  4.     [filename] => M00/00/00/wKgh8VBWiJuTMwLIALjDi6M68J4311.jpg
  5. )
  6. Array
  7. (
  8.     [group_name] => group1
  9.     [filename] => M00/00/00/wKgh8VBWiJuTMwLIALjDi6M68J4311_200X200.JPG
  10. )
复制代码
storage Server上的文件:

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
2 [报告]
发表于 2012-09-17 11:23 |只看该作者
回复 1# yanjing5462


1. 原图和缩略图现在混在一起,最好能完全分开,开始打算用不同group来区分,了解group机制后发现,不行。

A:因为FastDFS是根据文件ID直接定位到文件的,因此这个无法做到。如果你非得存储到不同的group,那只能不用主从文件特性。

2. 最好取消文件链接的方式,比如使用fastdfs_storage_upload_slave_by_filename上传时,检查原图的filename是否存在,存在,就直接生成一个filename+extname的文件,不存在,就报主文件不存在的错误。这样既节省了磁盘索引,也免去客户端记录文件对应关系,只记录原图filename和group就可以了

A:这个可以改进一下,加个参数来控制是否采用符号链接方式。

论坛徽章:
0
3 [报告]
发表于 2012-09-17 15:05 |只看该作者
非常感谢fish的解答!

由于带宽问题,近期打算把图片服务器分离出去,面对图片数量的不断上涨,打算来一次彻底的重构,找了很多软件,发现FastDFS最合适,近乎完美,呵呵。

论坛徽章:
0
4 [报告]
发表于 2012-09-22 23:07 |只看该作者
我这边只存原图,动态生成各种尺寸的缩略图。

论坛徽章:
0
5 [报告]
发表于 2012-10-29 16:45 |只看该作者
jitabc 发表于 2012-09-22 23:07
我这边只存原图,动态生成各种尺寸的缩略图。

那动态生成的缩略图存储到什么地方呢, 还有是不是还需要利用php处理生成呢

论坛徽章:
0
6 [报告]
发表于 2012-11-03 11:30 |只看该作者
生态生成还存他干毛,cdn给hold住。
回复 5# llkk0914


   

论坛徽章:
0
7 [报告]
发表于 2012-11-12 14:40 |只看该作者
回复 6# jitabc


    额,假如, 我们没有CDN之类的东西, 应该怎么做呢, 动态生成缩略图, 生成以后是不是需要存储一下呢,请指教

论坛徽章:
0
8 [报告]
发表于 2014-07-02 22:56 |只看该作者
回复 7# llkk0914
都已经在作分布式存储了还不用CDN,这不是本末倒置啊


   

论坛徽章:
0
9 [报告]
发表于 2019-04-08 09:18 |只看该作者
如果想把缩略图存储到服务器,需要怎么做呢?请大佬们指教一下

论坛徽章:
0
10 [报告]
发表于 2019-04-08 09:18 |只看该作者
如果想把缩略图存储到服务器,需要怎么做呢?请大佬们指教一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP