Heim >Backend-Entwicklung >PHP-Tutorial >[nginx] Ob der Download der Statistikdatei abgeschlossen ist (flask)
Es muss gezählt werden, ob die Datei vollständig vom Benutzer heruntergeladen wurde. Da es sich um eine Webanwendung handelt, wurde mit js keine Implementierungslösung gefunden, daher habe ich nach der Implementierungslösung von Nginx gesucht und zeichnete den einfachen Erkundungsprozess auf.
Experiment 1
Diese Methode besteht darin, Statistiken basierend auf dem Protokoll zu erstellen und das Protokoll jedes Mal zu analysieren Es dauert eine Weile, bis die Ergebnisse vorliegen, was etwas mühsam und nicht zeitgemäß ist.
Experiment 2:
Relevante Blogs finden
100 abgeschlossene Downloads zählen
Verwenden Sie post_action (die unten verwendete Methode)
Nginx-post-action-to-trigger-successfully-download-file Es sind Probleme beim Herunterladen von nginx-post-action-proxy-pass-track aufgetreten -file
Use x-accel-redirect
Der ungefähre Prozess:
Die Hauptarbeit ist 2
1 Ändern Sie die Konfiguration von Nginx und leiten Sie die heruntergeladenen Dateiinformationen an den Statistikdienst oder die URL
weiter
2 Statistischer Dienst zeichnet den Datei-Download-Status auf und bestimmt
Der entscheidende Punkt hier ist die Verwendung des post_action-Parameters von nginx. Nachdem die Download-Anfrage abgeschlossen ist, wird der Download-Status an einen anderen statistischen Dienst gesendet und der statistische Dienst bestimmt den Datei-Download-Status.
Die Konfiguration ähnelt
<code>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; } </code>
und schreibt dann eine Flasche, um Statistikanfragen zu empfangen
<code><span>#!/usr/bin/python</span><span>#-*- coding:utf-8 -*-</span><span>############################</span><span>#File Name: counting_file.py</span><span>#Author: orangleliu</span><span>#Mail: orangleliu@gmail.com</span><span>#Created Time: 2015-03-11 16:41:05</span><span>#License: MIT</span><span>############################</span><span>''' nginx统计用户下载文件字节 '''</span><span>from</span> flask <span>import</span> Flask, request app = Flask(__name__) <span>@app.route("/counting")</span><span><span>def</span><span>counting</span><span>()</span>:</span> req = request.args.get(<span>"FileName"</span>) clientip = request.args.get(<span>"ClientIP"</span>) size = request.args.get(<span>"body_bytes_sent"</span>) status = request.args.get(<span>"status"</span>) <span>print</span><span>"request "</span>, req <span>print</span><span>"ip "</span>, clientip <span>print</span><span>"size "</span>, size <span>print</span><span>"status "</span>, status <span>return</span><span>"ok"</span><span>if</span> __name__ == <span>"__main__"</span>: app.run(port=<span>8888</span>, debug=<span>True</span>)</code>
Zugriffsprotokolle
<code>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 - </code>
Solange es sich im Flask befindet. Nach der Verarbeitung können Sie die Downloads der Benutzer zählen.
Im obigen Artikel wurde auch erwähnt, dass es bei der Verwendung mehrerer Verbindungen zum Herunterladen zu Problemen kommen kann und die Ergebnisse ungenau sind, sodass noch viel Raum für Verbesserungen besteht
Aussage:
Dieser Artikel stammt aus dem Blog „orangleliu Notebook“. Bitte bewahren Sie diese Quelle zum Nachdruck auf: http://blog.csdn.net/orangleliu/article/details/44219213
Der Autor orangleliu übernimmt die Attribution-NonCommercial-ShareAlike-Lizenz
Das Obige stellt die vollständige Idee des Herunterladens von [nginx]-Statistikdateien (Flask) vor, einschließlich des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.