[nginx]统计文件下载是否完整思路(flask)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[nginx]统计文件下载是否完整思路(flask),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2821字,纯文字阅读大概需要5分钟。
内容图文
![[nginx]统计文件下载是否完整思路(flask)](/upload/InfoBanner/zyjiaocheng/154/b7d2efc3136d45e6b74d1ee124beaaa8.jpg)
有一个需求是统计文件是否被用户完整下载,因为是web应用,用js没有找到实现方案,于是搜索下nginx的实现方案,把简单的探索过程记录下。
实验一
- 最原始的思路,查看日志,下载了一个文件之后我们看日志的传输的文件大小跟文件原始的大小是否一致
- 测试要下载的文件的大小
- 一次完整下载的log 跟一次没下载完成的log,可以通过对比传输字节的大小来判断
这种方式就是根据日志来做统计,每隔一段时间分析日志得到结果,有些麻烦,时效性不好。
实验二:
找了相关的博客
Counting-100-completed-downloads
使用post_action(下面使用的方式)Nginx-post-action-to-trigger-successfully-download-file 遇到的问题 nginx-post-action-proxy-pass-track-downloading-file
使用 x-accel-redirect
- nginx-x-accel-redirect-php-rails 英文
- 利用nginx的x-accel-redirect头实现下载控制 中文
大概的流程:
主要的工作就是2个
1 修改nginx的配置,把下载文件的信息转发到统计服务或者url
2 统计服务记录和判断文件下载状态
这里的重点是使用nginx 的post_action参数, 在下载请求结束之后把下载的情况发送给另一个统计服务,由统计服务来判断文件下载的情况
配置类似
location / {
limit_rate 20k;
post_action @afterdownload;
}
location @afterdownload {
proxy_pass http://127.0.0.1:8888/counting?FileName=$uri&ClientIP=$remote_addr&body_bytes_sent=$body_bytes_sent&status=$request_completion;
internal;
}
然后写个一个flask 来接收统计请求
#!/usr/bin/python#-*- coding:utf-8 -*-#############################File Name: counting_file.py#Author: orangleliu#Mail: orangleliu@gmail.com#Created Time: 2015-03-11 16:41:05#License: MIT############################'''
nginx统计用户下载文件字节
'''from flask import Flask, request
app = Flask(__name__)
@app.route("/counting")defcounting():
req = request.args.get("FileName")
clientip = request.args.get("ClientIP")
size = request.args.get("body_bytes_sent")
status = request.args.get("status")
print"request ", req
print"ip ", clientip
print"size ", size
print"status ", status
return"ok"if __name__ == "__main__":
app.run(port=8888, debug=True)
访问的日志
lzz@ubuntu:code$ python counting_file.py
* Running on http://127.0.0.1:8888/
* Restarting with reloader
request /index.html
ip 10.0.1.16
size 0
status OK
127.0.0.1 - - [12/Mar/2015 10:42:59] "GET /counting?FileName=/index.html&ClientIP=10.0.1.16&body_bytes_sent=0&status=OK HTTP/1.0" 200 -
request /Pillow-2.3.0.zip
ip 10.0.1.16
size 225280
status
127.0.0.1 - - [12/Mar/2015 10:43:14] "GET /counting?FileName=/Pillow-2.3.0.zip&ClientIP=10.0.1.16&body_bytes_sent=225280&status= HTTP/1.0" 200 -
只要在flask中做处理就可以统计用户下载的情况了。
上面的文章也说了,当用户使用多个连接下载的时候可能就有问题了,会重复统计,结果也会不准确,所以还有很多改进空间.
声明:
本文出自 “orangleliu笔记本” 博客,转载请务必保留此出处http://blog.csdn.net/orangleliu/article/details/44219213
作者orangleliu 采用署名-非商业性使用-相同方式共享协议
以上就介绍了[nginx]统计文件下载是否完整思路(flask),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
内容总结
以上是互联网集市为您收集整理的[nginx]统计文件下载是否完整思路(flask)全部内容,希望文章能够帮你解决[nginx]统计文件下载是否完整思路(flask)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。