Hallo Liebe VB-P'ler,
ich habe habe folgendes Problem:
wie kann ich von einer Website mehrere Dateien (de facto einen Ordner) herunterladen OHNE sie auf dem Server zu Zippen?
Soweit ich informiert bin werden multiple Downloads von Http nicht unterstüzt.
Aber getreu dem Motto "Dem Inginör ist nichts zu schwör" bin ich auf dieses (zugegeben unschönes) Provisorium gekommen:
index.html:
Spoiler anzeigen
download.php:
Spoiler anzeigen
Der Nachteil dieser Methode: Der Benutzer wird mit unzumutbaren vielen Download-Prompts zugemüllt, es sei denn er benuzt die neueste Version von Chrome die Multiple Downloads zu verwalten weiß.
Daher meine Frage: Ist es möglich, eine Ordner bzw. mehrere Dateien auf einen Schwapp herunterzuladen?
ich habe habe folgendes Problem:
wie kann ich von einer Website mehrere Dateien (de facto einen Ordner) herunterladen OHNE sie auf dem Server zu Zippen?
Soweit ich informiert bin werden multiple Downloads von Http nicht unterstüzt.
Aber getreu dem Motto "Dem Inginör ist nichts zu schwör" bin ich auf dieses (zugegeben unschönes) Provisorium gekommen:
index.html:
HTML-Quellcode
- <!DOCTYPE HTML>
- <html>
- <head>
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
- <title>Multidownload test</title>
- </head>
- <body>
- <button id="download">Download</button>
- <div id="dl_frms"></div>
- <script type="text/javascript">
- $('#download').click(function() {
- $("#dl_frms").text("");
- //Dieses Array wird irgendwann mal dynamisch erstellt werden
- downloads = new Array('foobar2000.txt','bild.jpg','leer.zip', 'folder/file');
- add(0);
- function add(i){
- var iframe = '<iframe style="display:none; height:0px; width:0px;" src="download.php?file='+downloads[i]+'"></iframe>';
- $("#dl_frms").append(iframe);
- if(i < downloads.length-1){
- setTimeout(function() {add(i+1);},50);
- }
- }
- });
- </script>
- </body>
- </html>
download.php:
PHP-Quellcode
- <?php
- $path = 'files/';
- //Zuordung der Dateiamenserweiterungen zu ihren MIME-Typen
- function get_mime_type($filename) {
- $fileext = substr(strrchr($filename, '.'), 1);
- if (empty($fileext)) return (false);
- $regex = "/^([\w\+\-\.\/]+)\s+(\w+\s)*($fileext\s)/i";
- $lines = file('mime.types');
- foreach($lines as $line) {
- if (substr($line, 0, 1) == '#') continue;
- $line = rtrim($line) . " ";
- if (!preg_match($regex, $line, $matches)) continue;
- return ($matches[1]);
- }
- return (false);
- }
- //GET-Parameter überprüfen, Dateinamenserweiterungen herauslesen
- if(!$_GET['file']){
- die('000 no parameter given');
- }else{
- $file=$path.$_GET['file'];
- $ext=strtolower(substr(strrchr($file,'.'),1));
- }
- //Datei auf Vorhandensein und Lesbarkeit prüfen
- if(file_exists($file)){
- if(is_readable($file)){
- }else{
- die('500.2 file not readable');
- }
- }else{
- die('404 file not found');
- }
- //MIME-Typ ermittlen
- $mime=get_mime_type($file);
- if(!$ext){$mime="binary/octet-stream";}
- //Header und Datei rausschicken
- if ($mime){
- $size=filesize($file);
- if($fp=@fopen($file,'r')){
- header("Content-type: $mime");
- header("Content-Length: $size");
- header("Content-Disposition: attachment; filename=\"".substr(strrchr($file,"/"),1)."\"");
- fpassthru($fp);
- fclose($fp);
- exit;
- }
- }else{
- die('500.1 invalid MIME or extension');
- }
- ?>
Der Nachteil dieser Methode: Der Benutzer wird mit unzumutbaren vielen Download-Prompts zugemüllt, es sei denn er benuzt die neueste Version von Chrome die Multiple Downloads zu verwalten weiß.
Daher meine Frage: Ist es möglich, eine Ordner bzw. mehrere Dateien auf einen Schwapp herunterzuladen?
SᴛᴀʀGᴀᴛᴇ01