2011-06-29 6 views
7

Ok, así que tienen el código que permitirá a un usuario para descargar una canciónespacios en el nombre está rompiendo la descarga?

$file = DIR_DOWNLOAD . $download_info->row['filename']; 
$mask = basename($download_info->row['mask']); 
$mime = 'application/octet-stream'; 
$encoding = 'binary'; 

if (!headers_sent()) { 
if (file_exists($file)) { 
    header('Pragma: public'); 
    header('Expires: 0'); 
    header('Content-Description: File Transfer'); 
    header('Content-Type: ' . $mime); 
    header('Content-Transfer-Encoding: ' . $encoding); 
    header('Content-Disposition: attachment; filename=' . ($mask ? $mask : basename($file))); 
    header('Content-Length: ' . filesize($file)); 
    $file = readfile($file, 'rb'); 

El problema es que si la canción tiene un espacio en él como sinsita happy 1 SONIFI.mp3 el usuario sólo deberá descargar un archivo de texto denominado sinsita .. Ideas .any cómo solucionar este comportamiento

+0

Ver http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in- http –

Respuesta

11

hay que citar el nombre del archivo en la disposición de contenido:

header('Content-Disposition: attachment; filename="' . ($mask ? $mask : basename($file)) . '"'); 

Editar: Ahora que también significa que si el nombre del archivo contiene una cita; entonces tienes que escapar de esa cita. Así que en realidad su código es el siguiente ahora:

header('Content-Disposition: attachment; filename="' . str_replace('"', '\\"', ($mask ? $mask : basename($file))) . '"'); 
+0

esto funcionó muy bien, pero en cromo ni siquiera está descargando ... pero en Safari y Firefox funciona perfectamente ... cualquier idea – Trace

+0

@Tamer: No creo que esté relacionado con este problema. ¿Qué sucede si elimina el 'nombre de archivo' todos juntos? (Prueba de humo para ver si ese es el problema) – vcsjones

+0

Nota pequeña: utilicé comillas dobles en el encabezado con comillas simples que envuelven el nombre del archivo, eso no funcionó. El uso de cotización debe ser como la respuesta anterior. – Martijn

Cuestiones relacionadas