web-dev-qa-db-fra.com

Comment démarrer le téléchargement automatique d'un fichier dans Internet Explorer?

Comment initialiser un téléchargement automatique d'un fichier dans Internet Explorer?

Par exemple, dans la page de téléchargement, je souhaite que le lien de téléchargement apparaisse et que le message suivant s'affiche: "Si le téléchargement ne démarre pas automatiquement, etc.". Le téléchargement devrait commencer peu de temps après le chargement de la page.

Dans Firefox, c'est facile, il vous suffit d'inclure une balise méta dans l'en-tête, <meta http-equiv="Refresh" content="n;url"> où n est le nombre de secondes et url est l’URL de téléchargement. Cela ne fonctionne pas dans Internet Explorer. Comment faire pour que cela fonctionne dans les navigateurs Internet Explorer?

68
Pop Catalin

SourceForge utilise un <iframe> élément avec le src="" attribut pointant vers le fichier à télécharger.

<iframe width="1" height="1" frameborder="0" src="[File location]"></iframe>

(Effet secondaire: pas de redirection, pas de JavaScript, l'URL d'origine reste inchangée.)

104
devio

Je déteste lorsque les sites compliquent autant le téléchargement et tilisez des hacks au lieu d'un bon vieux lien .

Version simple morte:

<a href="file.Zip">Start automatic download!</a>

Ça marche! Dans tous les navigateurs!


Si vous souhaitez télécharger un fichier qui est généralement affiché en ligne (tel qu'une image), alors HTML5 a un attribut download qui force le téléchargement du fichier. Il vous permet également de remplacer le nom de fichier ( bien qu'il existe un meilleur moyen de le faire ):

<a href="report-generator.php" download="result.xls">Download</a>

Version avec une page "merci":

Si vous souhaitez afficher "merci" après le téléchargement, utilisez:

<a href="file.Zip" 
   onclick="if (event.button==0) 
     setTimeout(function(){document.body.innerHTML='thanks!'},500)">
 Start automatic download!
</a>

La fonction dans laquelle setTimeout pourrait être plus avancée et par exemple. télécharger la page complète via AJAX (mais ne naviguez pas en dehors de la page - ne touchez pas window.location ou activer d’autres liens).

Le fait est que le lien à télécharger est réel, peut être copié, traîné, intercepté par les accélérateurs de téléchargement, obtient :visited couleur, ne pas télécharger à nouveau si la page est laissée ouverte après le redémarrage du navigateur, etc.

C'est ce que j'utilise pour ImageOptim

50
Kornel

Je l'ai récemment résolu en plaçant le script suivant sur la page.

setTimeout(function () { window.location = 'my download url'; }, 5000)

Je suis d'accord pour dire qu'une méta-actualisation serait plus intéressante, mais si cela ne fonctionne pas, que faites-vous ...

23
ullmark

J'ai eu un problème similaire et aucune des solutions ci-dessus n'a fonctionné pour moi. Voici mon essai (nécessite jquery):

$(function() {
  $('a[data-auto-download]').each(function(){
    var $this = $(this);
    setTimeout(function() {
      window.location = $this.attr('href');
    }, 2000);
  });
});

Utilisation: Ajoutez simplement un attribut appelé data-auto-download au lien pointant vers le téléchargement en question:

<p>The download should start shortly. If it doesn't, click
<a data-auto-download href="/your/file/url">here</a>.</p>

Cela devrait fonctionner dans tous les cas.

21
kikito

Un peu de jQuery a résolu ce problème pour moi.

$(function() {
   $(window).bind('load', function() {
      $("div.downloadProject").delay(1500).append('<iframe width="0" height="0" frameborder="0" src="[YOUR FILE SRC]"></iframe>'); 
   });
});

Dans mon HTML, j'ai simplement

<div class="downloadProject"></div>

Cela ne fait qu’attendre une seconde et demie, puis ajouter la div avec l’iframe en référence au fichier que vous voulez télécharger. Lorsque l'iframe est mis à jour sur la page, votre navigateur télécharge le fichier. Aussi simple que cela. :RÉ

7
CameronK

Fonctionne sur Chrome, Firefox et IE8 et supérieur:

var link = document.createElement('a');
document.body.appendChild(link);
link.href = url;
link.click();
6
EL missaoui habib

Je l'ai utilisé, semble fonctionner et est juste simple, aucun cadre:

Your file should start downloading in a few seconds. 
If downloading doesn't start automatically
<a id="downloadLink" href="[link to your file]">click here to get your file</a>.

<script> 
    var downloadTimeout = setTimeout(function () {
        window.location = document.getElementById('downloadLink').href;
    }, 2000);
</script>

NOTE: cela commence la temporisation au moment où la page est chargée.

5
Tyler

C’est ce que j’utilise dans certains sites (nécessite jQuery):

$(document).ready(function() {
    var downloadUrl = "your_file_url";
    setTimeout("window.location.assign('" + downloadUrl + "');", 1000);
});

Le fichier est téléchargé automatiquement après 1 seconde.

5
Rabi

Un de plus :

var a = document.createElement('a');
a.setAttribute('href', dataUri);
a.setAttribute('download', filename);

var aj = $(a);
aj.appendTo('body');
aj[0].click();
aj.remove();
3
ZettaCircl

J'ai vérifié et trouvé, cela fonctionnera sur un clic de bouton en écrivant un événement onclick dans un tag d'ancrage ou un bouton d'entrée

onclick='javascript:setTimeout(window.location=[File location], 1000);'
3
Vandana

De retour aux racines, j'utilise ceci:

<meta http-equiv="refresh" content="0; url=YOURFILEURL"/>

Peut-être pas conforme à WC3 mais fonctionne parfaitement sur tous les navigateurs, pas de HTML5/JQUERY/Javascript.

Salutations Tom :)

2
Tom

Assurez-vous de servir le fichier sans un en-tête sans cache! IE a des problèmes avec cela, si l'utilisateur essaie "d'ouvrir" le téléchargement sans enregistrer au préalable.

2
scunliffe

Je pense que cela fonctionnera pour vous. Mais les visiteurs sont faciles s'ils obtiennent quelque chose en quelques secondes sans dépenser plus de temps. Ils visiteront donc à nouveau votre site. <a href="file.Zip" onclick="if (event.button==0) setTimeout(function(){document.body.innerHTML='thanks!'},500)"> Start automatic download! </a>

1
raheel

Cela a semblé fonctionner pour moi - à travers tous les navigateurs.

 <script type="text/javascript">
    window.onload = function(){
     document.location = 'somefile.Zip';
    }
    </script>
1
Dan

Pour ceux qui essaient de déclencher le téléchargement en utilisant un lien dynamique , il est difficile de le faire fonctionner de manière cohérente sur tous les navigateurs.

J'ai eu du mal à IE10 + à télécharger un PDF et utilisé @ dandavis 'download function ( https://github.com/rndme/télécharger ).

IE10 + a besoin de msSaveBlob.

1
Nelu

J'espère que cela fonctionnera avec tous les navigateurs. Vous pouvez également définir le moment du téléchargement automatique.

<html>
<head>
<title>Start Auto Download file</title>
<script src="http://code.jquery.com/jquery-3.2.1.min.js"></script>
<script>
$(function() {
$('a[data-auto-download]').each(function(){
var $this = $(this);
setTimeout(function() {
window.location = $this.attr('href');
}, 2000);
});
});
</script>
</head>
<body>
<div class="wrapper">
<p>The download should start shortly. If it doesn't, click
<a data-auto-download href="auto-download.Zip">here</a>.</p>
</div>
</body>
</html>

Démo ici

1
M. Lak

Belle solution jQuery:

jQuery('a.auto-start').get(0).click();

Vous pouvez même définir un nom de fichier différent pour le téléchargement dans <a> tag:

Your download should start shortly. If not - you can use
<a href="/attachments-31-3d4c8970.Zip" download="attachments-31.Zip" class="download auto-start">direct link</a>.
0
Somerussian