Thread Bester Weg zum Streaming (23 answers)
Opened by bianca at 2017-06-18 16:17

haj
 2021-12-06 09:52
#194084 #194084
User since
2015-01-07
508 articles
BenutzerIn

user image
Mir ist aus Deinem Beispiek nicht so ganz klar, woher $cont kommt - aber das sieht verdächtig danach aus, als ob der Server versucht, die gesamten 500MB in einen Perl-Skalar zu packen. Das ist keine gute Idee.

Wenn's nur darum geht, große Mengen von Daten von A nach B zu packen, dann nimmt man in Perl dafür Perldoc:perlfunc sysread zum Lesen aus der Datei und Perldoc:perlfunc syswrite zum Schreiben. Dabei werden alle Zwischenschritte des Perl-I/O umgangen.

Den Header kannst Du mit "normalem" print absetzen, wenn Du zuvor das Puffern in I/O-System ausschältst mit $| = 1;.

Ein Komplettbeispiel:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use autodie;

my $datei = 'my_huge_video.mp4';
my $type = 'whatever';
my $groesse = (stat $datei)[7];
my $name = 'Twelve Dances With God: In the Pay of Spain';

my $header = <<"EOH";
Content-Type: $type\nContent-length: $groesse
Content-Disposition: attachment; filename: "$name";

EOH

{
    local $| = 1;
    print $header;
    open my $input,'<',$datei;
    my $buffer;
    while (sysread $input,$buffer,1024*1024) {
        syswrite STDOUT,$buffer;
    }
}

View full thread Bester Weg zum Streaming