Wie kann Tornado eine einzelne statische Datei an einem beliebigen Ort bereitstellen?

8

Ich entwickle eine einfache Web-App mit Tornado. Es dient einigen dynamischen und einigen statischen Dateien. Die dynamischen sind kein Problem, aber ich habe Probleme, eine statische Datei zu liefern. Ich möchte die Datei /path/to/foo.json bereitstellen, wenn auf die URL /foo.json zugegriffen wird.

Beachten Sie, dass sich /path/to/foo.json außerhalb des Dokumentstammverzeichnisses befindet. In Apache würde ich einfach einen Alias ​​einrichten. Mit Tornado habe ich:

%Vor%

Ich habe den Regex-Gruppenoperator () hinzugefügt, um Tornado zu erfüllen, der ansonsten eine Ausnahme ausgelöst hat. Aber jetzt, wenn ich auf /foo.json zugreife, bekomme ich eine 404: Datei nicht gefunden.

Tests haben ergeben, dass Tornado versucht, den angegebenen Pfad als Root-Verzeichnis zu verwenden, an das er foo.json anfügt, was bedeutet, dass meine Datei gefunden werden könnte, wenn sie sich in /path/to/foo.json/foo.json befände. Schließen, aber nicht ganz.

Ich nehme an, ich könnte meinen Pfad auf "/ path / to" verkürzen, was das Abrufen von /path/to/foo.json über die URL /foo.json auslöst, aber das zwingt mich dazu, denselben Namen zu verwenden in der URL wie im Dateisystem. Wie kann ich einfach ein einfaches, willkürliches URL-zu-Datei-Mapping erstellen?

Ich habe diesbezüglich einige Nachforschungen angestellt und die Dokumentation für tornado.web.Application gelesen und tornado.web.StaticFilehandler sowie einige andere SO Fragen . Nichts ist mein Anwendungsfall.

    
Randall Cook 21.01.2014, 02:51
quelle

3 Antworten

5

So etwas sollte funktionieren:

%Vor%

Das URL-Muster und der Dateiname müssen nicht verwandt sein, Sie könnten dies tun und es würde genauso gut funktionieren:

%Vor%     
A. Jesse Jiryu Davis 21.01.2014, 03:39
quelle
11

StaticFileHandler erwartet zwei Argumente. Wenn Sie also eine einzelne URL (/foo.json) Ihrem Dateipfad zuordnen möchten, können Sie Folgendes verwenden:

%Vor%

Der reguläre Ausdruck stimmt mit /foo.json überein und sendet die leere Erfassungsgruppe () , wodurch der Dateipfad unverändert verwendet wird. Wenn die Erfassungsgruppe nicht leer ist, wird /path/to/foo.json als Verzeichnis /path/to/foo.json/ behandelt, und der Handler versucht, den Inhalt der Erfassungsgruppe mit einem Dateinamen in diesem Verzeichnis abzugleichen.

    
Mark 30.11.2014 11:50
quelle
5

StaticFileHandler ruft den Dateinamen aus der Regex-Erfassungsgruppe und den Verzeichnisnamen von seinem Pfadargument ab. Es funktioniert, wenn Sie /path/to/ als Pfad verwenden:

%Vor%

StaticFileHandler wurde für Fälle entwickelt, in denen URLs und Dateinamen übereinstimmen. Wenn Sie nicht sicherstellen können, dass diese Datei auf der Festplatte unter dem gleichen Namen wie auf dem Datenträger verfügbar ist, müssen Sie einen benutzerdefinierten Handler verwenden.

    
Ben Darnell 21.01.2014 14:22
quelle

Tags und Links