sehr Dateien uploaden (>100MB) - wie macht das z.B. youTube?
halla
- webserver
0
Der Martin
0 halla0 Daniel Thoma0 Texter mit x0 Alexander (HH)
Hallo alle zusammen,
mich würde einfach mal grundsätzlich interessieren, wie es z.B. für Seiten wie youTube möglich ist, Uploads mit einer Größe von bis zu einem GB (!) zu erlauben?
Ok, klar, ich kann z.B. bei PHP natürlich die max_upload_size aufdrehen - aber irgendwann ist da auch mal Schluss. Gibt es denn irgendwelche (Server?)-Bibliotheken, die solche großen Uploads ermöglichen?
Oder ganz anders gefragt: Wenn ich meinen eigenen Besucher erlauben will, Dateien mit mehreren Hundert MB hochzuladen, was muss ich dann anstellen? Außer die max_upload_size hochzudrehen? ;-)
vg,
Daniel
Hi,
mich würde einfach mal grundsätzlich interessieren, wie es z.B. für Seiten wie youTube möglich ist, Uploads mit einer Größe von bis zu einem GB (!) zu erlauben?
es überrascht mich, dass so große Uploads tatsächlich erlaubt sein sollen. Wozu? Die youtube-Videos sind doch meist <10MB.
Ok, klar, ich kann z.B. bei PHP natürlich die max_upload_size aufdrehen - aber irgendwann ist da auch mal Schluss. Gibt es denn irgendwelche (Server?)-Bibliotheken, die solche großen Uploads ermöglichen?
Ich könnte mir denken, dass bei einer so großen Plattform wie eben youtube nicht gerade PHP im Einsatz ist. Andere serverseitige Techniken erlauben sozusagen die Verarbeitung "on the fly". Ich kenne mich z.B. nicht mit Perl aus, habe aber gelesen, dass dort das Script sofort gestartet wird und die hochgeladenen Daten selbst in Empfang nehmen muss (während das PHP-Script erst gestartet wird, wenn der Upload abgeschlossen ist). Dann kann man natürlich auch während des Uploads schon umcodieren oder in die endgültige Zialdatei, Datenbank, was auch immer speichern.
Oder ganz anders gefragt: Wenn ich meinen eigenen Besucher erlauben will, Dateien mit mehreren Hundert MB hochzuladen, was muss ich dann anstellen? Außer die max_upload_size hochzudrehen? ;-)
Viiiiel Plattenplatz und Arbeitsspeicher bereitstellen, deinen Hoster schonend auf sowas vorbereiten, und damit rechnen, dass dein Server auch gern mal mit 300MB Schrott zugemüllt wird. Das kann schon ganz schön Traffic kosten ...
Wofür zum Geier brauchst du denn mehrere 100 MB Uploads? Willst du eine Tauschbörse für ganze CD-Images einrichten? Von Sinn oder Unsinn der Anwendung abgesehen würde ich für solche Transfermengen eher FTP oder andere Protokolle empfehlen, die dafür besser geeignet sind.
Ciao,
Martin
Hallo,
es überrascht mich, dass so große Uploads tatsächlich erlaubt sein sollen. Wozu? Die youtube-Videos sind doch meist <10MB.
Das mußt Du schon youTube fragen :-)
Auf jeden Fall sind Uploads bis 1GB erlaubt.
Ich kenne mich z.B. nicht mit Perl aus, habe aber gelesen, dass dort das Script sofort gestartet wird und die hochgeladenen Daten selbst in Empfang nehmen muss (während das PHP-Script erst gestartet wird, wenn der Upload abgeschlossen ist). Dann kann man natürlich auch während des Uploads schon umcodieren oder in die endgültige Zialdatei, Datenbank, was auch immer speichern.
Mit geht es gar nicht mal so sehr ums umcodieren oder konvertieren oder sonstwas, sondern wirklich nur um den Upload selbst - vielleicht gibts da ja *irgendwas*, was man nutzen könnte...
Wofür zum Geier brauchst du denn mehrere 100 MB Uploads? Willst du eine Tauschbörse für ganze CD-Images einrichten? Von Sinn oder Unsinn der Anwendung abgesehen würde ich für solche Transfermengen eher FTP oder andere Protokolle empfehlen, die dafür besser geeignet sind.
Sollte das Upload Problem lösbar sein, ist es Teil einer Diplomarbeit - Hoster und solche Dinge sind also kein Thema :-)
Hallo Martin,
Wofür zum Geier brauchst du denn mehrere 100 MB Uploads? Willst du eine Tauschbörse für ganze CD-Images einrichten? Von Sinn oder Unsinn der Anwendung abgesehen würde ich für solche Transfermengen eher FTP oder andere Protokolle empfehlen, die dafür besser geeignet sind.
Was macht andere Protokolle dafür besser geeignet? Mit HTTP kann man auch problemlos große Datenmengen übertragen. Manche Browser haben beim Upload allerdings eine kaum brauchbare Fortschrittsanzeige, aber das ist ein anderes Thema.
Grüße
Daniel
mich würde einfach mal grundsätzlich interessieren, wie es z.B. für Seiten wie youTube möglich ist, Uploads mit einer Größe von bis zu einem GB (!) zu erlauben?
es überrascht mich, dass so große Uploads tatsächlich erlaubt sein sollen. Wozu? Die youtube-Videos sind doch meist <10MB.
Die flv-Dateien sind so klein. Man kann aber auch andere Formate hochladen, die dann umgewandelt werden oder? 5 Minuten im MiniDV-Format sind schon 1GB groß.
Moin Moin!
Ich könnte mir denken, dass bei einer so großen Plattform wie eben youtube nicht gerade PHP im Einsatz ist. Andere serverseitige Techniken erlauben sozusagen die Verarbeitung "on the fly". Ich kenne mich z.B. nicht mit Perl aus, habe aber gelesen, dass dort das Script sofort gestartet wird und die hochgeladenen Daten selbst in Empfang nehmen muss (während das PHP-Script erst gestartet wird, wenn der Upload abgeschlossen ist).
Äpfel und Birnen ...
In Perl (und vielen anderen in diesem Umfeld einsetzbaren Sprachen) hat man die Wahl, welches Toolkit man benutzen möchte und kann so auch auswählen, welche Einschränkungen man sich oder dem Benutzer auferlegen will. Dazu kommt noch die Frage, wie man Sprache, Toolkit und Webserver zusammenbringt. Es muß auch nicht immer der alte Indianer mit der CGI-Schnittstelle sein.
Einige Kombinationen nehmen einem viel Arbeit ab, haben dafür aber (meist konfigurierbare und oft sinnvolle) Einschränkungen. Typischerweise ist ein Upload im Gigabyte-Bereich eben wahrscheinlicher ein DoS-Angriff als ein sinnvoller Upload. So kann eine Upload-Grenze bzw. Request-Größen-Grenze von einigen Megabytes durchaus sinnvoll sein. Bei anderen Kombinationen hat man alle Freiheiten, his hin zum Wechsel auf ein komplett eigenes Protokoll anstelle des bewährten HTTP.
Dann kann man natürlich auch während des Uploads schon umcodieren oder in die endgültige Zialdatei, Datenbank, was auch immer speichern.
Transcodieren eines Gigabytes großen Videos während der Upload-Request noch nicht beantwortet ist, erscheint mir nicht sonderlich sinnvoll. Möglich ist das natürlich, aber irgendwann ist der Browser mit seiner Geduld am Ende und erklärt den Server für kommunikationsunwillig ("Timeout").
Oder ganz anders gefragt: Wenn ich meinen eigenen Besucher erlauben will, Dateien mit mehreren Hundert MB hochzuladen, was muss ich dann anstellen? Außer die max_upload_size hochzudrehen? ;-)
Die Prüfung der maximalen Upload-Größe komplett ausschalten? (Wie das geht, sollte im Handbuch stehen.) Nicht unbedingt im Internet, aber in einem Intranet durchaus hilfreich.
Viiiiel Plattenplatz und Arbeitsspeicher bereitstellen,
"oder" reicht. Entweder streamt man (bzw. das verwendete Toolkit) den Request in kleinen Blöcken gleich in eine oder mehrere Temp-Dateien, oder man jongliert wirklich die ganze Zeit mit den Daten nur im Speicher herum, bis sie klein genug für den Durchschnitts-Downloader sind. Wer auf ein Unix-System zurückgreifen kann und ein passendes Upload-Format hat, kann den Upload auch durch ein paar Pipes schicken, ohne großartig Platten- oder RAM-Platz zu brauchen.
deinen Hoster schonend auf sowas vorbereiten,
Guter Plan. Nicht, dass beim fürsorglichen Hoster plötzlich alle Alarmglocken angehen, weil der Traffic plötzlich vertausendfacht wird.
und damit rechnen, dass dein Server auch gern mal mit 300MB Schrott zugemüllt wird. Das kann schon ganz schön Traffic kosten ...
Mit einem Toolkit, das erst den gesamten Upload annimmt, schon. Wenn man aber anhand der ersten paar Kilobyte des Uploads schon merkt, das Müll kommt, kann man unhöflicherweise auch einfach den Socket schließen.
Wofür zum Geier brauchst du denn mehrere 100 MB Uploads? Willst du eine Tauschbörse für ganze CD-Images einrichten? Von Sinn oder Unsinn der Anwendung abgesehen würde ich für solche Transfermengen eher FTP oder andere Protokolle empfehlen, die dafür besser geeignet sind.
FTP ist zwar nahezu overhead-frei, aber das Theater mit zwei getrennten, an Telnet angelehnten Verbindungen ist schonmal ziemlich lästig, wenn eine Firewall oder ein NAT-Router im Spiel sind. Und richtig große Datenmengen über 2 GB (2^31) bzw. 4 GB (2^32) scheinen manchen FTP-Servern echte Probleme zu machen. Im Browser ist ein FTP-Upload zwar möglich, aber die Darstellung und Benutzerführung sind doch deutlich anders als bei HTTP-Uploads (typsicherweise Drag-and-Drop ins Fenster mit dem FTP-Listing statt Browse- und Upload-Buttons). Dazu kommen kleinere Garstigkeiten wie z.B. die Tatsache, dass der Benutzer typischerweise einen Account auf dem FTP-Server braucht, oder dass der Benutzer den Namen der hochgeladenen Datei auf dem Server mehr oder weniger frei bestimmen kann.
HTTP hat einigen Overhead, aber für den Durchschnittsanwender ist es ohne weitere Konfiguration verfügbar. Wer eine Webseite im Internet erreichen kann, kann auch Gigabytes auf einen Server per HTTP hochladen. Bei Downloads scheinen manche HTTP-Server mit Dateien über den "magischen" Grenzen 2 GB bzw. 4 GB ebenfalls überfordert zu sein.
rsync (über ssh) ist im Moment mein Protokoll der Wahl für große Datenmengen, das erzeugt auf beiden Seiten zwar eine beachtliche CPU-Last, aber es überträgt nur die Daten, die wirklich übertragen werden müssen. Verbindungsabbrüche sind überhaupt kein Problem, einfach rsync neu starten. Der Haken: rsync funktioniert nur auf Unixen, unter Windows braucht man erstmal cygwin o.ä., und mit der Kommandozeile wird sich der durchschnittliche Websurfer wohl auch nicht anfreunden können.
Alexander