8.4 主页展示与下载文件功能

1、主页展示

客户端

web前端通过Ajax动态想后台请求页面。

http请求方式GET

请求url为/data

传输协议以json数据格式为例:

{
  "cmd":"newFile",
  "fromId":"0",
  "count":"8"
}

服务端

首先应该在nginx.conf里面设置好对/data 的url处理的模块.

        location = /data {
            fastcgi_pass 127.0.0.1:8085;
            fastcgi_index data.cgi;
            include fastcgi.conf;
        }

当然同时fastCGI对应的data.cgi要在后台启动起来

后台服务进程解析json数据,得到cmd,fromId,count等参数

随后从redis数据库中取出每个文件的信息返回给前端。

还是以json格式传输。

{
"games":   [
           {
                        "id":   "group1/M00/00/00/wKgCbFepUHGAUTOhAP_fjuN0kbA670.pdf",
                        "kind": 2,
                        "title_m":      "python-网络爬虫.pdf",
                        "title_s":      "文件title_s",
                        "descrip":      "2016-08-09 11:39:24",
                        "picurl_m":     "http://172.16.0.148/static/file_png/pdf.png",
                        "url":  "http://192.168.2.108/group1/M00/00/00/wKgCbFepUHGAUTOhAP_fjuN0kbA670.pdf",
                        "pv":   1,
                        "hot":  0
                }, 
                {
                        "id":   "group1/M00/00/00/wKgCbFepT0SAOBCtACjizOQy1fU405.rar",
                        "kind": 2,
                        "title_m":      "阶段测试_STL_数据结构.rar",
                        "title_s":      "文件title_s",
                        "descrip":      "2016-08-09 11:34:23",
                        "picurl_m":     "http://172.16.0.148/static/file_png/rar.png",
                        "url":  "http://192.168.2.108/group1/M00/00/00/wKgCbFepT0SAOBCtACjizOQy1fU405.rar",
                        "pv":   1,
                        "hot":  0
                }, 
                {
                        "id":   "group1/M00/00/00/wKgCbFepTp2AUnd1AFRAAvu2TSg259.mp3",
                        "kind": 2,
                        "title_m":      "黄昏.mp3",
                        "title_s":      "文件title_s",
                        "descrip":      "2016-08-09 11:31:35",
                        "picurl_m":     "http://172.16.0.148/static/file_png/mp3.png",
                        "url":  "http://192.168.2.108/group1/M00/00/00/wKgCbFepTp2AUnd1AFRAAvu2TSg259.mp3",
                        "pv":   5,
                        "hot":  0
                }, 
                {
                        "id":   "group1/M00/00/00/wKgCbFepTmGAQvuXAAEYXfRAMkc937.png",
                        "kind": 2,
                        "title_m":      "01-nginx-市场占有率.png",
                        "title_s":      "文件title_s",
                        "descrip":      "2016-08-09 11:30:35",
                        "picurl_m":     "http://172.16.0.148/static/file_png/png.png",
                        "url":  "http://192.168.2.108/group1/M00/00/00/wKgCbFepTmGAQvuXAAEYXfRAMkc937.png",
                        "pv":   2,
                        "hot":  0
                }, 
                {
                        "id":   "group1/M00/00/00/wKgCbFepSKeASREwAAapfc9k6Rc011.jpg",
                        "kind": 2,
                        "title_m":      "小猫5.jpg",
                        "title_s":      "文件title_s",
                        "descrip":      "2016-08-09 11:06:10",
                        "picurl_m":     "http://172.16.0.148/static/file_png/jpg.png",
                        "url":  "http://192.168.2.108/group1/M00/00/00/wKgCbFepSKeASREwAAapfc9k6Rc011.jpg",
                        "pv":   1,
                        "hot":  0
                }, 
                {
                        "id":   "group1/M00/00/00/wKgCbFepSKeAOkV4AAY7zSGunKE058.jpg",
                        "kind": 2,
                        "title_m":      "小猫6.jpg",
                        "title_s":      "文件title_s",
                        "descrip":      "2016-08-09 11:06:09",
                        "picurl_m":     "http://172.16.0.148/static/file_png/jpg.png",
                        "url":  "http://192.168.2.108/group1/M00/00/00/wKgCbFepSKeAOkV4AAY7zSGunKE058.jpg",
                        "pv":   0,
                        "hot":  0
                }, 
                {
                        "id":   "group1/M00/00/00/wKgCbFepSKeARhoLAAXsKfNoK_k046.jpg",
                        "kind": 2,
                        "title_m":      "猫4.jpg",
                        "title_s":      "文件title_s",
                        "descrip":      "2016-08-09 11:06:09",
                        "picurl_m":     "http://172.16.0.148/static/file_png/jpg.png",
                        "url":  "http://192.168.2.108/group1/M00/00/00/wKgCbFepSKeARhoLAAXsKfNoK_k046.jpg",
                        "pv":   0,
                        "hot":  0
                },
                {
                        "id":   "group1/M00/00/00/wKgCbFepSKeAADFfAAbuwxC1bYU619.jpg",
                        "kind": 2,
                        "title_m":      "猫2.jpg",
                        "title_s":      "文件title_s",
                        "descrip":      "2016-08-09 11:06:09",
                        "picurl_m":     "http://172.16.0.148/static/file_png/jpg.png",
                        "url":  "http://192.168.2.108/group1/M00/00/00/wKgCbFepSKeAADFfAAbuwxC1bYU619.jpg",
                        "pv":   0,
                        "hot":  0
                }
     ]
}

其中每个文件对应id、kind、title_m、title_s、descrip、picurl_m、url、pv、hot等字段。

id为通过fastDFS保存文件所返回的分布式最终的file_id字符串,用了记录文件唯一标识的key。

kind应该是文件类型。

title_m 文件的名称

title_s 暂时没有用上。

descrip 存放文件上传的时间。

picurl_m 存放文件的的图标文件路径

url 存放文件存放在fastdfs分布式存储服务器的url地址。

pv 文件当前的下载量

hot 该文件是否是火爆文件。

然后前端根据文件数据,通过js将文件内容展示出来。即可。

2、文件下载

文件下载实际上比较容易,因为页面上展示的“下载文件”就已经将封装好的url展示出来,下载文件全部基于浏览器对文件的自动解析,如果是图片那就是展示出来,如果是rar等,那就直接下载。

results matching ""

    No results matching ""