2010-09-14 13 views
6

Tengo esta situación en la que tenemos archivos multimedia almacenados en un CDN global. Nuestra aplicación web está alojada en su propio servidor y luego, cuando se necesitan los recursos multimedia, se llaman desde la URL CDN. Recientemente tuvimos una página donde el usuario puede descargar archivos adjuntos, sin embargo, algunos de los tipos de archivos se abrieron en el navegador en lugar de descargar (como MP3). La única forma de evitar esto era especificar manualmente la respuesta HTTP para adjuntar el archivo, pero la única forma en que podía lograrlo era descargar el archivo de CDN a mi servidor y luego devolverlo al usuario, lo cual frustra el propósito de tenerlo. en el CDN global. En cambio, me pregunto si hay alguna solución del lado del cliente para esto.¿Hay alguna manera de 'simular' el clic derecho en el comando guardar como o forzar la descarga del archivo en el navegador con JavaScript?

EDIT: ¿Acabo de encontrar esto en alguna parte, aunque no estoy seguro de si funcionará correctamente en todos los navegadores?

<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: Bueno, tanto por esa idea ->Does execCommand SaveAs work in Firefox?

+1

Estamos asumiendo que no puede configurar el CDN, solo cargarle archivos? Presumiblemente, el CDN examina el contenido para escribir encabezados HTTP, ¿puede manipularse de alguna manera? –

+0

No creo que haya ninguna configuración como esa, pero comprobaré por si acaso que existe la posibilidad de establecer un método de entrega diferente para una determinada carpeta, por ejemplo. – BigOmega

Respuesta

1

¿Su CDN permiten especificar las cabeceras HTTP? La nube de Amazon lo hace, por ejemplo.

+0

Al analizar esto ahora, en Amazon, ¿puede especificar diferentes encabezados HTTP para diferentes directorios? No podría hacer un cambio que abarque todo eso u otras cosas se romperían. – BigOmega

+0

Parece que es por archivo, pero hay una API para hacer cambios más amplios (y clientes). No lo uso, pero lo busqué y puede agregar encabezados HTTP personalizados por archivo. –

0

Encontré una solución fácil a esto que funcionó para mí. Agregue un parámetro de URL al nombre del archivo. Esto engañará al navegador evitando que esté construido en mapeos de archivos. Por ejemplo, en lugar de http://mydomain.com/file.pdf, configure su enlace del lado del cliente para que apunte al http://mydomain.com/file.pdf? (agregó un signo de interrogación)

+0

debería estar en comentario – Pawan

Cuestiones relacionadas