Ich habe ein REST-Frontend geschrieben mit Python/Bottle, die Datei-Uploads behandelt, in der Regel große. Die API ist in einer solchen Weise, dass wirtten:Streaming-Datei-Upload mit Flasche (oder Flasche oder ähnliches)
der Client mit der Datei als Payload PUT sendet. Unter anderem sendet es Datums- und Autorisierungsheader. Dies ist eine Sicherheitsmaßnahme gegen Replay-Attacken - die Anforderung mit einem temporären Schlüssel versengt ist, Ziel-URL verwenden, das Datum und einige andere Dinge
nun das Problem. Der Server akzeptiert die Anfrage, wenn das angegebene Datum in einem bestimmten Fenster von 15 Minuten liegt. Wenn der Upload lange genug dauert, ist er länger als das zulässige Zeitdelta. Jetzt wird die Bearbeitung der Anforderungsautorisierung mit dem Decorator auf der Flashenansichtsmethode durchgeführt. Die Flasche startet den Versandvorgang jedoch erst, wenn der Upload abgeschlossen ist. Daher schlägt die Validierung bei längeren Uploads fehl.
Meine Frage ist: Gibt es eine Möglichkeit zur Flasche oder WSGI zu erklären, die Anfrage sofort und Strom mit dem Hochladen zu behandeln, wie es geht? Dies wäre für mich auch aus anderen Gründen nützlich. Oder irgendwelche anderen Lösungen? Während ich dies schreibe, kommt mir WSGI Middleware in den Sinn, aber trotzdem möchte ich externe Einblicke haben.
ich wäre bereit zu Flasche zu wechseln, oder auch anderes Python-Frameworks, wie die REST-Frontend ganz leicht ist.
Danke
Ich werde das auf einigen Betriebssystemen (in meinem Fall Ubuntu 14.10) hinzufügen, wenn Sie geöffnet (Dateinamen, ‚a‘) zu tun, dann suchen() nicht den Mauszeiger bewegen. Das Anhängen wird erzwungen, und Sie hängen eingehende Blöcke immer an das Ende der Datei an. – Drachenfels
@ petrus-jvrensburg Ihre Antwort ist großartig für meine Bedürfnisse, aber ich frage mich, wie kann Flask nicht die Anfrage in dem Fall, dass zwei Benutzer den gleichen Dateinamen zur gleichen Zeit hochladen?Müssen Sie einen Sitzungsmechanismus implementieren, um die beiden Benutzer zu identifizieren, oder gibt es eine zugrundeliegende http/nginx/uwsgi/flask-Eigenschaft, die die Anforderung der gleichen Aufrufmethode korrekt zuordnet? Danke für Ihre Hilfe! –
@CyrilN. Hab nicht darüber nachgedacht. Wenn Sie jedoch bereits eine Authentifizierung für Ihre App eingerichtet haben, verwenden Sie diese. Andernfalls könnten Sie 'request.remote_addr' und 'request.user_agent' abfragen, um zwischen gleichzeitigen Benutzern zu unterscheiden. –