Thread Viele mp3 Dateien via CGI/FastCGI versenden (9 answers)
Opened by Max_Perlbeginner at 2017-10-03 15:23

Max_Perlbeginner
 2017-10-03 15:23
#187468 #187468
User since
2016-04-04
107 Artikel
BenutzerIn
[default_avatar]
Hallo alle,

Seit einiger Zeit grübel ich schon über der Frage herum, wie man über CGI/FastCGI (und ursprgl. auch Plack) statische Dateien versenden kann. Bei mir war das Problem, dass einige wenige Dateien auf einer Webseite zwar über CGI geladen werden können. Ab einer gewissen Anzahl (bei mir geht es um 30 mp3-Dateien, die aber mittels in einem <audio> tag mittels preload="metadata" geladen werden sollen), werden nur noch einzelne Dateien ausgeliefert. Viele können dagegen nicht abgespielt werden.

Ich weiß, wahrscheinlich ist die beste Lösung, Apache das Senden statischer Dateien zu überlassen (was ich derzeit auch mache). Ich möchte aber nur gerne verstehen, warum es das Herunterladen der Audiodateien über CGI/FastCGI nicht so klappt wie gedacht.

Hat irgendjemand eine Idee, wo ich bei der Fehlersuche anfangen kann?

Derzeit erfolgt das Ausliefern statischer Dateien über folgendes noch sehr rudimentäres CGI::Application Modul:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package Static;
use CGI::Application::Plugins::Stream qw(stream_file);
[..]
sub setup {
my $self = shift;
$self->start_mode('stream');

$self->run_modes(
'stream' => 'stream'
);
}

sub stream {
my ($self) = @_;
$| = 1;
my $staticdir = $self->param('staticdir');
$self->header_add(-Content_Disposition => "Inline", -Server => "CGIServer");
my $file = ''; $file = $self->query->path_info();
$file =~ s/^\/static\///;
$file = "$staticdir/$file";
my $absfile = abs_path($file) or return $self->file_not_found();

$self->header_add(-content_type => 'text/css') if ($absfile =~ /\.css$/);
$self->header_add(-content_type => 'audio/mpeg') if ($absfile =~ /\.mp3$/);

# Verhindere Path Traversal Attacks
if ($absfile =~ /^$staticdir\// && $self->stream_file( $absfile, 2048 ) ) {
return;
} else {
$self->file_not_found()
}
}
[...]


Ich hatte deswegen schon einmal auf der Github Plack Seite geschrieben (siehe hier), aber so recht verstanden habe ich nich, warum es nicht geht.
Über jeden Tipp, wo ich bei der Fehlersuche beginnen kann, bin ich sehr dankbar...

LG Max
Last edited: 2017-10-03 15:28:48 +0200 (CEST)

View full thread Viele mp3 Dateien via CGI/FastCGI versenden