2010-04-29 6 views
7

Aquí está la solicitud y respuesta cabecerasAl enviar cabeceras para descargar un archivo PDF, Safari anexa .html

http://www.example.com/get/pdf 

GET /~get/pdf HTTP/1.1 
Host: www.example.com 
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
Referer: http://www.example.com 
Cookie: etc 

HTTP/1.1 200 OK 
Date: Thu, 29 Apr 2010 02:20:43 GMT 
Server: Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8i DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 
X-Powered-By: Me 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Pragma: no-cache 
Cache-Control: private 
Content-Disposition: attachment; filename="File #1.pdf" 
Content-Length: 18776 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/html; charset=utf-8 
---------------------------------------------------------- 

Básicamente, las cabeceras de respuesta se envían por el método de DOMPDF stream().

En Firefox, se solicita el archivo como File #1.pdf. Sin embargo, en Safari, el archivo se guarda como File #1.pdf.html.

¿Alguien sabe por qué Safari está agregando la extensión html al nombre de archivo?

También estoy usando Kohana 3, sirviendo el PDF desde un método de controlador.

+2

¿Podría estar relacionado con que Content-Type se configure como text/html? – Kitsune

Respuesta

10

Por lo que veo, el tipo de contenido es incorrecto, creo que si eso es solucionado, su problema será resuelto.

+1

¡Lo he echado de menos por completo! Supongo que lo estableceré en 'application/pdf' entonces. – alex

+0

yup, creo que debería resolver el problema –

2

Porque le dices que es HTML. Arregle su tipo MIME.

Content-Type: text/html; charset=utf-8 
2

Puede cambiar la forma Kohana 3 envía cabeceras como tal ...

$this->request->headers['Content-Type'] = File::mime($file); 
1

lo he arreglado mediante la adición de die(); después de transmitirlo

$dompdf = new DOMPDF(); 
$dompdf->set_paper("a4", "portrait"); 
$dompdf->load_html($html); 
$dompdf->render(); 
$dompdf->stream($invoice.".pdf"); 
die(); 
+0

Esto funcionó para mí usando la biblioteca League \ Csv con Laravel 4.2. Aparentemente, los encabezados se agregan o cambian después de llamar a '$ csv-> output ('file.csv');', lo que confunde a Safari. Simplemente agregue 'die;' después de llamar a la salida. –

Cuestiones relacionadas