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指定的名稱。

完整的請求和響應消息如下:

請求包:

返回包:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM