2010-09-14 40 views
6

J'ai cette situation où nous avons des fichiers multimédias stockés sur un CDN global. Notre application Web est hébergée sur son propre serveur, puis lorsque les ressources multimédias sont nécessaires, elles sont appelées depuis l'URL de CDN. Récemment, nous avons eu une page où l'utilisateur peut télécharger des pièces jointes, mais certains types de fichiers s'ouvraient dans le navigateur au lieu de télécharger (comme MP3). Le seul moyen de contourner ce problème était de spécifier manuellement la réponse HTTP pour attacher le fichier mais la seule façon d'y parvenir était de télécharger le fichier de CDN sur mon serveur et de le renvoyer à l'utilisateur, ce qui va à l'encontre du but sur le CDN mondial. Au lieu de cela, je me demande s'il existe une solution côté client pour cela?Existe-t-il un moyen de «simuler» un clic droit sur la commande save-as ou de forcer le téléchargement du fichier dans le navigateur avec JavaScript?

EDIT: Je viens de trouver quelque part, même si je ne suis pas sûr que cela fonctionnera 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: Eh bien, tant pour cette idée ->Does execCommand SaveAs work in Firefox?

+1

Nous supposons que vous ne pouvez pas configurer le CDN, ne téléchargez que des fichiers. On peut supposer que le CDN examine le contenu pour écrire les en-têtes HTTP - cela peut-il être manipulé de quelque façon que ce soit? –

+0

Je ne pense pas qu'il existe une telle configuration, mais je vais vérifier au cas où il y aurait un moyen de définir une méthode de livraison différente pour un certain dossier, par exemple. – BigOmega

Répondre

1

Est-ce que votre CDN vous permet de spécifier les en-têtes HTTP? Amazon cloudfront fait, par exemple.

+0

En regardant ceci maintenant, sur Amazon pouvez-vous spécifier différents en-têtes HTTP pour différents répertoires? Je ne pouvais pas faire un changement global comme ça ou d'autres choses seraient brisées. – BigOmega

+0

On dirait que c'est par fichier, mais il y a une API pour faire plus de changements (et de clients). Je ne l'utilise pas, mais je l'ai cherché et vous pouvez ajouter des en-têtes HTTP personnalisés par fichier. –

0

J'ai trouvé une solution facile à cela qui a fonctionné pour moi. Ajouter un paramètre d'URL au nom de fichier. Cela entraînera le navigateur à contourner ses mappages de fichiers intégrés. Par exemple, au lieu de http://mydomain.com/file.pdf, définissez votre lien côté client pour pointer vers http://mydomain.com/file.pdf? (Nous avons ajouté un point d'interrogation)

+0

devrait être dans le commentaire – Pawan