2011-03-18 19 views
6

Birden çok dosyayı jsp dosyasında bir düğmeye tıklatmak istiyorum.
Bir servleti iki kez çağırmak için js'de aşağıdaki kodu kullanıyorum. xyz.jsp olarakIE'de bir çekimde birden fazla dosya nasıl indirilir

var iframe = document.createElement("iframe"); 
iframe.width = iframe.height = iframe.frameBorder = 0; 
iframe.scrolling = "no"; 
iframe.src = "/xyz.jsp?prodId=p10245"; 
document.getElementById("iframe_holder").appendChild(iframe); 

var iframe2 = document.createElement("iframe"); 
iframe2.width = iframe2.height = iframe2.frameBorder = 0; 
iframe2.scrolling = "no"; 
iframe2.src = "/xyz.jsp?prodId=p10243"; 
document.getElementById("iframe_holder").appendChild(iframe2); 

i yoldan dosyasını indirir ve tarayıcıda göndermek sunucu uygulamasını arıyorum.
Sorun, safari, firefox, ancak IE'de çalışmıyor olmasıdır.
Birden çok dosyayı IE ile indiremiyoruz?

cevap

4

Tasarım gereği, kullanıcı tarafından başlatılmayan dosya karşıdan yüklemeleri IE'de engellenir. Bu doğal olarak, tek bir kullanıcı tıklaması sonucunda birden fazla dosya indirmenin mümkün olmaması gerektiği anlamına gelir.

4

IE ve Chrome

birden çok dosyayı indirmek için aşağıdaki kodu kullandım
function downloadFile(url) 
{ 
    var iframe = document.createElement("iframe"); 
    iframe.src = url; 
    iframe.style.display = "none"; 
    document.body.appendChild(iframe); 
} 

function downloadFiles(urls) 
{ 
    downloadFile(urls[0]); 
    if (urls.length > 1) 
     window.setTimeout(function() { downloadFiles(urls.slice(1)) }, 1000); 
} 

Kısa bir ile her biri için DownloadFile() arayacak olan) (downloadFiles işlevi URL'lerin bir dizi geçirilecek arasındaki gecikme. Gecikme işe almak için anahtar gibi görünüyor!

+0

Yalnızca bir tane açık kaydetme istemi olacaktır. –

0

Benzer bir ihtiyacım vardı, ancak yüklemelerin yeni bir pencerede gerçekleşmesini de istedim.

Dosya listesini indirmek için bir js ve gerçek dosya kaydetmeyi yapmak için bir php oluşturdum. Yukarıdakileri başlangıç ​​noktası olarak kullandım ve PHP başlıyor (tamam, orijinal kaynağı bulamıyor). Geçirilen URI'yi kodlar, böylece dosya adlarındaki boşluklar sorun yaratmaz.

(function() { 
"use strict"; 

var files = [],    // Array of filename strings to download 
newWindow,     // New window to handle the download request 
secondsBetweenDownloads;  // Wait time beteen downloads in seconds 
// 
// Download a file using a new window given a URI 
// 
    function downloadFile(uri) { 
    if (!newWindow) { 
     newWindow = window.open('', 
      '', 
      'width=1500 height=100'); 
    } 
    if (newWindow) { 
     newWindow.location = 
      'saveAs.php?' + 
      'file_source=' + encodeURI(uri); 
     newWindow.document.title = "Download File: " + uri; 
    } else { 
     console.log("Unable to open new window. Popups blocked?"); 
    } 
} 
// 
// Download all files specified in the files[] array from siteName. 
// Download the file at array position zero, then set a timeout for 
// secondsBetweenDownloads seconds 
// 
function downloadFiles(siteName) { 
    var showTime = new Date(); 

    console.log(
      showTime.toTimeString().substring(0,8) + 
      " Starting download for: " + files[0] 
     ); 
    // Skip any empty entries, download this file 
    if (files[0].length > 0) downloadFile(siteName + files.splice(0, 1)); 
    if (files.length > 0) {      // If more files in array 
      window.setTimeout(function() { // Then setup for another iteration 
       downloadFiles(siteName); 
      }, secondsBetweenDownloads * 1000); // Delay for n seconds between requests 
    } else { 
     newWindow.close();      // Finished, close the download window 
    } 
} 
// 
// Set the web site name and fill the files[] array with the files to download 
// then kick off the download of the files. 
// 
$(document).ready(function() { 
    var 
    siteName** = "http://www.mysteryshows.com/thank-you/"; 
    secondsBetweenDownloads** = 35; // N seconds delay between requests 

    files = [ 
     "show1.mp3", 
     "show2.mp3" 
    ]; 
    downloadFiles(siteName, files); 
}); 
}()); 

Sayfanın HTML'si basit. Temel olarak herhangi bir sözdizimi uyumlu sayfa yapacak.

js dosyasının newWindow.location satırında kullandığı saveAs.php sayfası yalnızca php'dir.

 <?php 
    if (isset($_GET['file_source'])) { 
     $fullPath = $_GET['file_source']; 
     if($fullPath) { 
      $fsize = filesize($fullPath); 
      $path_parts = pathinfo($fullPath); 
      $ext = strtolower($path_parts["extension"]); 
      switch ($ext) { 
       case "pdf": 
       header("Content-Disposition: attachment; 
       filename=\"".$path_parts["basename"]."\""); // use 'attachment' to 
                  // force a download 
       header("Content-type: application/pdf"); // add here more headers for 
                 // diff. extensions 
       break; 
       default; 
       header("Content-type: **application/octet-stream**"); 
       header("Content-Disposition: 
        filename=\"".$path_parts["basename"]."\""); 
      } 
      if($fsize) {//checking if file size exist 
       header("Content-length: $fsize"); 
      } 
      $request = $path_parts["dirname"] . '/' . 
       rawurlencode($path_parts["basename"]); 
      readfile($request); 
      exit; 
     } 
    } 
?> 

Ben geçerli, kodlanmış isteği oldu sağlamak için URI sadece 'basename' kısmına rawurlencode kullandı.

İlgili konular