#!/usr/bin/perl -w use strict; use CGI; use File::stat; use constant CHUNK_SIZE_BYTES => 256; my $query = new CGI; my $filename = $query->param('name'); my $filesize = stat($filename)->size; my $loadtime = $query->param('loadtime'); # in seconds my $chunkcount = $filesize / CHUNK_SIZE_BYTES; my $chunkdelay = $loadtime / $chunkcount; my $mimetype = $query->param('mimetype'); # flush the buffers after each print select (STDOUT); $| = 1; print "Content-Type: ${mimetype}\r\n"; print "Expires: Thu, 01 Dec 2003 16:00:00 GMT\r\n"; print "Cache-Control: no-store, no-cache, must-revalidate\r\n"; print "Pragma: no-cache\r\n"; print "\r\n"; open(FILE, $filename) or die; binmode FILE; my ($data, $n); my $total = 0; while (($n = read FILE, $data, CHUNK_SIZE_BYTES) != 0) { print $data; $total += $n; if ($total >= $filesize) { last; } # Throttle if there is some. if ($chunkdelay > 0) { select(undef, undef, undef, $chunkdelay); } } close(FILE);