Перенаправление заголовка файла MHTML, показывающее исходный код с сегментами MIME

У меня проблема с получением iframe для отображения 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 );
}

Вышеупомянутый метод работает, но он требует двух шагов (скачать и открыть), что не устраивает моих клиентов.

Как видите, сейчас я просто заставляю браузер открывать MHT для загрузки. Я хочу, чтобы он перенаправлял, используя местоположение заголовка, чтобы он отображал MHT в этом iframe, как это делается для файлов, которые не имеют расширения MHT. Я предполагаю, что это просто вызов заголовка, который сообщает браузеру, что его MHT-контент. При обычном перенаправлении браузер просто показывает кучу тегов MHT, никакого реального содержимого (поэтому я предполагаю, что требуется специальный заголовок). Есть идеи?

РЕДАКТИРОВАТЬ:

Вот еще немного информации, которую я нашел относительно этой проблемы. Файл MHT содержит несколько сегментов, которые выглядят так:

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: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://*******.net/packages/js/jquery.header.js

По какой-то причине, если я использую методологию вложения и "открываю" файл, IE/Firefox без проблем отображает документ. Если я использую метод заголовка "location", он просто отображает содержимое файла (html-теги, mime-файлы и т. Д.), Интерпретируемое содержимое. В этом случае отображается исходный HTML-код, а не отображается страница 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 );
}

Используя контент-тип и местоположение, выходные данные для IE и FF (и, скорее всего, для всех других браузеров) выглядят следующим образом:

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>...

Таким образом, вместо того, чтобы фактически отображать MHT, он просто выплевывает все теги и данные.

Есть идеи? Должен ли я удалить данные "MIME" из файлов?:

------=_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

Если так, то как?

редактировать

По иронии судьбы, если я настрою это как расположение содержимого: вложение и использую readFile, я могу открыть документ, и он будет отображаться правильно. Только если я попытаюсь встроить его непосредственно в iframe, он будет отображать исходный код без содержимого. Есть идеи?

1 ответ

Решение

В настоящее время существует известная проблема с Google-Chrome при просмотре MHT - он всегда будет рассматривать их как Content-Disposition: attachment и скачать их.

IE всегда должен просматривать MHT нормально.

Firefox будет просматривать их нормально, если вы установите плагин для него.

Если браузер действительно мог правильно отображать MHT, тогда должно быть достаточно следующих заголовков:

Content-Type: message/rfc822
Content-Disposition: inline

У меня были проблемы с просмотром файлов MHT в Chrome, и в итоге я решил преобразовать MHT в одну HTML-страницу на лету. Это сработало для ситуации, с которой я имел дело, но может не сработать для общих файлов MHT.

Другие вопросы по тегам