2012-02-12 36 views
5

Necesito ayuda con un problema en una herramienta que estoy desarrollando.Forzar la descarga desde un servidor externo y renombrar

Necesito descargar un archivo externo y cambiarle el nombre, pero sin usar readfile(), file_get_contents() o fread() (los archivos son demasiado grandes para leerlos en el servidor y descargarlos de nuevo en la PC de visitante).

he tratado primero con:

Código:

header("Location: http://www.example.com/example_download.zip"); 

Funciona para la descarga, pero no para el cambio de nombre example_download.zip.

Así que he tratado con readfile():

Código:

header("Content-Disposition: attachment; filename="example_download_2.zip"\n\n"); 
header("Content-Type: application/force-download"); 
    readfile("http://www.example.com/example_download.zip"); 
    exit; 

Con el código anterior funciona bien, la descarga del archivo remoto por primera vez en el servidor, el cambio de nombre y después enviarlo a el visitante con el nuevo nombre, pero el uso de recursos de este proceso es muy alto, y también el uso del ancho de banda.

Así que estoy buscando una forma de generar una descarga forzada de un archivo externo, cambiarle el nombre sobre la marcha y generar una descarga con el nuevo nombre, pero descargando directamente desde la fuente. ¿Es posible?

Gracias de antemano Saludos

+0

Si el cliente va a descargar directamente de la fuente, entonces no, no hay forma de darle un nuevo nombre. – drew010

+0

http://stackoverflow.com/questions/541265/renaming-file-on-another-server-as-user-downloads-it-2-using-php – FeRtoll

Respuesta

2

Es imposible que pueda hacer esto. Si su script php redireccionó al cliente a alguna URL más, entonces todos los encabezados HTTP se dejan a la nueva secuencia de comandos url para decidir. Tienes que descargarlo para cambiarle el nombre.

4

HTML5 ahora le permite hacer lo que quiere a través del atributo download:

<a href="http://www.example.com/example_download.zip" download="custom_filename.zip"> 
    Link 
</a> 

Más información:

http://developers.whatwg.org/links.html#attr-hyperlink-download http://updates.html5rocks.com/2011/08/Downloading- resources-in-HTML5-a-download

+0

No es esto, esto funciona de dominio cruzado o sub -dominio. – Ben

+0

¿Funcionará para todos los navegadores y para todos los sistemas operativos? Porque el atributo de descarga no funciona para el sistema operativo basado en Linux. – kalidasan

+0

No realmente: http://caniuse.com/#feat=download – Mauro

Cuestiones relacionadas