Rolf b: Demo: JavaScript und Binärdateien, Multimedia

Beitrag lesen

Ok, jetzt weiß ich was Du mit Datei und Datenstruktur gemeint hast. Die Datei (in diesem Fall der Content des POST-Requests) ist eine physische Manifestation der clientseitigen Datenstruktur und Streamingfähigkeit bedeutet, dass der Server nicht gezwungen ist, die komplette clientseitige Struktur erstmal im RAM zu reproduzieren, sondern nur die gerade unbedingt benötigten Teile davon (Dateiname und einige KB der Datei für den nächsten Schreibzugriff in die Upload-Datei). Insofern sind Datenstruktur UND gewählte Serialisierungstechnik wichtig für eine effiziente Lösung. Wenn ich den Content zunächst in eine Hierarchie aus Hashtables lade, muss ich aber erstmal alles lesen. Das ist kein Streaming.

Dass CGI.pm es auch nicht macht (wobei ich keine Ahnung habe was CGI.pm ist) macht die Sache nicht besser. Kein Streaming heißt, dass ein viele parallele Uploads großer Dateien schnell den Server überlasten und einen DoS Vektor eröffnen. Deswegen hat PHP ja ein Limit für die Dateigröße bei Uploads (und PERL garantiert auch). Das Problem durch ein irgendwie geartetes Containerformat zu verschärfen, kann demnach nicht die Lösung sein. Große Dateien gehören nicht auf einen HTTP Datenstrom, der von einer Script-Engine oder vom Script selber im RAM gepuffert wird. Oder - schlimmer noch - von einem weiteren Abstraktionslayer nochmals dupliziert wird. Darauf wollte ich hinaus, auf sonst nichts. Und ich will auch keinen Vergleich PHP - PERL lostreten, denn PHP macht es ja auch nicht sonderlich besser. Es geht mir um die grundsätzliche Vorgehensweise, effizient und multiuserfest eine größere Datenmenge zum Server zu bekommen.

D.h. für große Uploads, die aus JS heraus initiiert werden, muss man irgendwie die Behauptung aus dem MDN zum Fliegen bekommen, dass XMLHttpRequest auch einen FTP-Transfer kann (was lt. Google eine Herausforderung zu sein scheint und wofür man Cross-Domain Hürden überwinden muss), oder man braucht eine serverseitige URL, die hinreichend low-level verarbeitet wird, dass der Server NICHTS puffert. Das PL Framework scheint mir dafür ungeeignet. Eine PHP-Standardlösung auch. Ob in Perl oder PHP eine effiziente Lösung grundsätzlich möglich ist, kann ich nicht sagen.

Rolf