Pregunta

Teniendo en cuenta: Todos los archivos PDF subidos en el servidor tienen el prefijo marcas de tiempo. Más tarde, el usuario puede descargar los archivos de nuevo. Estos nombres de archivo (feo) no cambiarían de nuevo en el servidor.

Pregunta: Cuando dé la opción de descargar el archivo PDF, el nombre del archivo se ve feo y largo. ¿Cómo puedo cambiar el nombre a algo con sentido, de modo que cuando el usuario descarga este archivo, el nombre no se ve raro?

¿Es necesario hacer una copia, ya que cambiar el nombre del archivo original no es una opción? ¿No sería una carga extra para cada archivo descargable? Obviamente la eliminación del archivo copiado sería otro paso adicional?

¿Es posible cambiar el nombre de archivo una vez que el archivo se ha descargado por completo en el lado del cliente?

¿Qué sugieren ustedes?

¿Fue útil?

Solución

Algo como esto:

<?php
// We'll be outputting a PDF  
header('Content-type: application/pdf');

// It will be called downloaded.pdf  
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf  
readfile('original.pdf');
?> 

Otros consejos

que tenía que hacer esto para un proyecto reciente y estaba un poco confundido sobre cómo implementar, pero lo descubrí poco después de ver la respuesta de Klaus. Para dar más detalles sobre la respuesta de Klaus:

1) Crear un archivo llamado, por ejemplo, "process.php". Modificar el código de Klaus para que acepte dos parámetros: el nombre del archivo original y el nuevo nombre. Mi process.php se ve así:

<?php
$file = $_GET['file'];
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/pdf');
    header('Content-Disposition: attachment; filename='.$_GET['newFile']);
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>

2) Crear un enlace en su página de usuario orientada hacia el que apunta a la secuencia de comandos del procesador:

<a href="process.php?file=OriginalFile.pdf&newFile=MyRenamedFile.pdf">DOWNLOAD ME</a>

Es necesario establecer el nombre del archivo deseado en la cabecera Content-Disposition:

$name = 'desiredname.pdf';
header('Content-Disposition: attachment;filename="' . $name . '"');

Pero, por desgracia esto no va a ser recogido por un determinado navegador web desarrollado por un equipo en Redmond. Si usted quiere conseguir que funcione en ese navegador, así, entonces usted necesita para anexar el mismo nombre que la última parte de la ruta de solicitud. Por ejemplo:. http://example.com/pdf/desiredname.pdf

El nombre de archivo del contenido servido se define en las cabeceras HTTP. Mire alrededor de la href="http://php.net/manual/en/function.header.php" rel="nofollow página PHP en las cabeceras de (también los comentarios) para obtener más información.

que estaba haciendo algo similar hace un tiempo, servir archivos a través de php (en mi caso, no para cambiar el nombre de ellos, pero al comprobar que la persona que descargarlos se registran en y se le permitió ver los archivos). He descubierto que las descargas de PDF no funcionan en IE no ser que también agregué estos encabezados:

header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Transfer-Encoding: binary');

No estoy seguro de por qué. Experimentar y ver qué pasa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top