BinaryWrite файла MHT не обрабатывается IE как MHT - PullRequest
0 голосов
/ 13 августа 2010

У меня есть MHTML-файл со встроенными изображениями. MHTML генерируется на сервере, и затем я обычно доставляю файл с использованием BinaryWrite. Я также пробовал Server.Transfer, Response.Write после преобразования в ASCII и записи файла на диск и использования Response.WriteFile. В любом из этих случаев результирующий файл не представляется (кажется) как файл MHT. Для настройки изображения я пробовал Content-ID и Content-Location. URL изображения отображается как cid:example1 при просмотре в IE8. При открытии файла после сохранения на диск он отображается как mhtml:file://C:\Documents и Settings\benjynito\Desktop\output634172401776447258.mht!cid:example1. Или при просмотре одним из методов, которые работают, вы получаете mhttp://...output123.mht!cid:example1.

Output.MimeType это сообщение / rfc822. Я также пробовал application / octet-stream и multipart / related.

Запись файла на диск и использование Response.Redirect работает. Доступ к файлу с прямым URL работает. Сохранение файла на диск и последующее открытие файла работает.

Кажется, IE принимает HTML-запрос к запросу и не расшифровывает новый тип контента. Но вы можете делать такие вещи для динамических таблиц стилей, скриптов и т. Д., Поэтому я не очень верю в это. Я не мог видеть никаких явных различий. Я только что попробовал, и BinaryWrite отлично работает в Opera.

Если мне абсолютно необходимо беспокоиться о записи во временный каталог, а затем о перенаправлении в файл, я это сделаю. Я просто надеялся избежать очистки временных файлов. Что я хочу сделать не возможно? Пример написания файла приведен ниже.

Заранее спасибо!

if (response != null && response.Output != null)
{
    Response.Clear();
    Response.AddHeader("Content-Type", response.Output.MimeType);
    Response.AddHeader("Content-Disposition", "attachment;filename=output" + DateTime.UtcNow.Ticks.ToString(CultureInfo.InvariantCulture) + "." + response.Output.Extension);

    // Response.Write( System.Text.Encoding.ASCII.GetString(response.Output.Bytes));
    Response.BinaryWrite(response.Output.Bytes);

    //Response.Clear();
    //Server.Transfer("/ISV/Forms/Test/output634172397522707394.mht");

    //Response.Clear();
    //Response.WriteFile( Server.MapPath("/ISV/Forms/Test/output634172397522707394.mht"));

    Response.Flush();
    Response.End();
}

1 Ответ

1 голос
/ 13 августа 2010

Я не думаю, что ваши заголовки Content-Type и Content-Disposition верны.Используйте Fiddler, чтобы увидеть, на что они настроены при загрузке MHTML в виде статического файла.

Попробуйте тип multipart / related и расположение inline.Есть некоторые доказательства , что эта комбинация работает.

...