6 votes

Existe-t-il un moyen de "simuler" la commande "Enregistrer sous" d'un clic droit ou de forcer le téléchargement d'un fichier dans le navigateur avec JavaScript ?

J'ai cette situation où nous avons des fichiers médias stockés sur un CDN global. Notre application Web est hébergée sur son propre serveur et, lorsque les ressources multimédias sont nécessaires, elles sont appelées à partir de l'url du CDN. Récemment, nous avions une page où l'utilisateur pouvait télécharger des fichiers joints, mais certains types de fichiers s'ouvraient dans le navigateur au lieu de se télécharger (comme les MP3). Le seul moyen de contourner ce problème était de spécifier manuellement la réponse HTTP pour joindre le fichier, mais la seule façon d'y parvenir était de télécharger le fichier du CDN vers mon serveur, puis de le renvoyer à l'utilisateur, ce qui va à l'encontre de l'objectif de l'avoir sur le CDN global. Je me demande donc s'il existe une solution côté client pour cela ?

EDIT : Je viens de trouver ceci quelque part, mais je ne suis pas sûr que cela fonctionne correctement dans tous les navigateurs ?

<body>
<script>
function downloadme(x){
myTempWindow = window.open(x,'','left=10000,screenX=10000');
myTempWindow.document.execCommand('SaveAs','null','download.pdf');
myTempWindow.close();
}
</script>

<a href=javascript:downloadme('/test.pdf');>Download this pdf</a>
</body>

RE-EDIT : Oh bien, tant pis pour cette idée -> Est-ce que execCommand SaveAs fonctionne dans Firefox ?

2voto

Lou Franco Points 48823

Votre CDN vous permet-il de spécifier les en-têtes HTTP ? Amazon cloudfront le fait, par exemple.

1voto

user3334305 Points 11

J'ai trouvé une solution facile qui a fonctionné pour moi. Ajoutez un paramètre URL au nom du fichier. Cela incitera le navigateur à contourner ses mappings de fichiers intégrés. Par exemple, au lieu de http://mydomain.com/file.pdf configurez votre lien côté client pour qu'il pointe sur http://mydomain.com/file.pdf ? (ajout d'un point d'interrogation)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X