zoukankan      html  css  js  c++  java
  • FastDFS 使用经验分享

    原文:http://www.ttlsa.com/fastdfs/fastdfs-experience-sharing/

    应用背景

    文件被上传到FastDFS后Storage服务端将返回的文件索引(FID),其中文件名是根据FastDFS自定义规则重新生成的,而不是原始文件名,例如: group2/M00/00/89/eQ6h3FKJf_PRl8p4AUz4wO8tqaA688.apk

    使用http下载时如不加处理,显示给用户的文件名会是这样的eQ6h3FKJf_PRl8p4AUz4wO8tqaA688.apk,这样的用户体验很不好。由于FastDFS不会存储原始文件名,也没有提供恢复原始文件名的方法,所以需要应用系统自己想办法恢复原始文件名。

    解决方法

    通过在项目中多次尝试,找到一种较简单的实现方法,实现过程如下:

    一. 应用系统在上传文件到FastDFS成功时将原始文件名“文件索引(FID)”保存下来(例如:保存到数据库)。

    二. 用户点击下载的时用Nginx的域名FID拼出url,然后在url后面增加一个参数,指定原始文件名。例如:http://121.14.161.48:9030/group2/M00/00/89/eQ6h3FKJf_PRl8p4AUz4wO8tqaA688.apk?attname=filename.apk

    三. 在Nginx上进行如下配置,这样Nginx就会截获url中的参数attname,在Http响应头里面加上字段 Content-Disposition “attachment;filename=$arg_attname”。

    location /group2/M00 {
    root /data/store/data;
    if ($arg_attname ~ "^(.*).apk") {
        add_header Content-Disposition "attachment;filename=$arg_attname";
    }
    ngx_fastdfs_module;
    }

    四. 浏览器发现响应头里面有Content-Disposition “attachment;filename=$arg_attname”时,就会把文件名显示成filename指定的名称。

    完整的请求和响应消息如下:

    请求包:

    返回包:

  • 相关阅读:
    centos 7离线安装中文版GitLab
    Oracle表名、列名、约束名的长度限制
    使用sparsecheckout命令克隆“部分”代码
    C专家编程(1)
    搜索相关性
    今日进度
    今日进度
    今日进度
    今日进度
    今日进度
  • 原文地址:https://www.cnblogs.com/shihaiming/p/6283256.html
Copyright © 2011-2022 走看看