php - descargar - Redireccionamiento de encabezado de archivo MHTML que muestra el código fuente con segmentos MIME
mhtml descargar (1)
Tengo un problema al obtener un iframe para mostrar archivos MHT:
if( strtolower( substr( $filename , -4 ) ) == ".mht" ){
$filename = str_replace( "/" , "//" , $filename );
header("Content-type: $filetype");
header("Content-Length: $filesize");
header(''Content-Disposition: attachment; filename="''.$title.''.mht"'');
readfile( HT_STORAGE . $filename );
}
else{
$filename = str_replace( "//" , "/" , $filename );
header( "location: https://secure.***************.com/" . $filename );
}
El método anterior funciona, pero requiere dos pasos (descargar y abrir) que mis clientes no están contentos.
Como puede ver, en este momento simplemente estoy forzando al navegador a abrir el MHT como una descarga. Quiero que redirija usando una ubicación de encabezado para que muestre el MHT dentro de este iframe como lo hace para los archivos que no tienen la extensión MHT. Asumo que esto es simplemente una llamada de encabezado que le dice al navegador que su contenido MHT. Con un redireccionamiento regular, el navegador solo muestra un montón de etiquetas MHT, sin contenido real (por lo que supongo que se necesita un encabezado especial). ¿Algunas ideas?
EDITAR:
Aquí hay más información que encontré con respecto a este tema. El archivo MHT contiene varios segmentos que se ven así:
From: "Saved by Windows Internet Explorer 9"
Subject: Print Preview
Date: Tue, 2 Aug 2011 12:06:51 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
type="text/html";
boundary="----=_NextPart_000_0186_01CC510C.A9789090"
X-MimeOLE: Produced By Microsoft MimeOLE V6.1.7600.16807
This is a multi-part message in MIME format.
Y
------=_NextPart_000_0186_01CC510C.A9789090
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://*******.net/packages/js/jquery.header.js
Por alguna razón, si uso la metodología de archivo adjunto y "abro" el archivo, IE / Firefox no tiene problemas para procesar el documento. Si utilizo el método de "ubicación" del encabezado, simplemente muestra el contenido del archivo (etiquetas html, elementos de mimo, etc.), el contenido interpretado. Doing esto muestra el resultado HTML sin procesar, en lugar de mostrar realmente la página MHT:
if( strtolower( substr( $filename , -4 ) ) == ".mht" ){
$filename = str_replace( "//" , "/" , $filename );
header("Content-type: message/rfc822");
header( "location: " . $filename );
//header("Content-Length: $filesize");
//header(''Content-Disposition: attachment; filename="''.$title.''.mht"'');
//readfile( HT_STORAGE . $filename );
}
else{
$filename = str_replace( "//" , "/" , $filename );
header( "location: https://secure.*****************.com/" . $filename );
}
Al usar el tipo de contenido y la ubicación, la salida es la siguiente en IE y FF (y muy probablemente en todos los demás navegadores):
From: "Saved by Windows Internet Explorer 9"
Subject: Print Preview
Date: Tue, 2 Aug 2011 12:06:51 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
type="text/html";
boundary="----=_NextPart_000_0186_01CC510C.A9789090"
X-MimeOLE: Produced By Microsoft MimeOLE V6.1.7600.16807
This is a multi-part message in MIME format.
------=_NextPart_000_0186_01CC510C.A9789090
Content-Type: text/html;
charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: https://kinnser.net/am/printwrapper.cfm?PatientTaskKey=36184728
=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3.org/TR/html4/loose.dtd"><HTML><HEAD><TITLE>Print=20
Preview</TITLE>...
Entonces, en lugar de renderizar realmente el MHT, simplemente escupe todas las etiquetas y datos.
¿Algunas ideas? ¿Debo eliminar los datos "MIME" de los archivos ?:
------=_NextPart_000_0186_01CC510C.A9789090
Content-Type: text/html;
charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: https://kinnser.net/am/printwrapper.cfm?PatientTaskKey=36184728
Si es así, ¿cómo?
Editar
Irónicamente, si lo configuro como disposición de contenido: datos adjuntos y uso el archivo de lectura, puedo abrir el documento y se muestra correctamente. Solo si intento insertarlo directamente en línea en el iframe, muestra el código fuente y no contiene contenido. ¿Algunas ideas?
Actualmente hay un problema conocido con Google Chrome cuando se visualizan MHT: siempre los tratará como Content-Disposition: attachment
y los descargará.
IE siempre debe ver MHT bien.
Firefox los verá bien, si instalas un plugin para ello.
Si el navegador realmente pudo mostrar MHTs correctamente, los siguientes encabezados deberían ser suficientes:
Content-Type: message/rfc822
Content-Disposition: inline
Me encontré con problemas con Chrome viendo archivos MHT también, y al final la solución que utilicé fue convertir el MHT en una sola página HTML sobre la marcha. Esto funcionó para la situación con la que estaba lidiando, pero puede no funcionar para archivos genéricos MHT.