Напишите Word Doc на лету - PullRequest
       14

Напишите Word Doc на лету

0 голосов
/ 27 октября 2011

У меня есть этот фрагмент кода:

Response.AddHeader("Content-type", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
Response.AppendHeader("Content-disposition", "attachment; filename=Bio.docx");
Response.BinaryWrite(lawyerBio.MakeDoc());

Он прекрасно работает во всех основных браузерах, но не работает в IE8.

То, что IE8 делает в первый разЯ нажимаю на страницу, появляется всплывающее сообщение об ошибке:

Internet Explorer не может загрузить «John-Smith» из «домена домена».

Internet Explorer не может открытьэтот интернет-сайт.Запрашиваемый сайт либо недоступен, либо не найден.Пожалуйста, повторите попытку позже.

Если я нажму OK, а затем обновлю страницу, она загрузит файл просто отлично с именем Bio.docx.Он дает сбой в первый раз, каждый раз и работает во второй раз, каждый раз.John-Smith - это имя файла страницы, на которой он размещается, так что, похоже, в первый раз он не улавливает расположение контента.

Есть ли какие-либо известные проблемы с IE8 иличто вы, ребята, видите, что я делаю не так?

Приветствия


Обновление

Ниже приведены заголовки, отправленные с этим файлом:

        Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Cache-Control: no-cache, no-store
    [2] => Pragma: no-cache
    [3] => Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document
    [4] => Expires: -1
    [5] => Server: Microsoft-IIS/7.5
    [6] => Set-Cookie: website#sc_wede=1; path=/
    [7] => Set-Cookie: website#lang=en; path=/
    [8] => Set-Cookie: ASP.NET_SessionId=zabhwz55brq0ebfyjqn1c3bm; path=/; HttpOnly
    [9] => Content-Disposition: attachment; filename=Bio.docx
    [10] => X-AspNet-Version: 2.0.50727
    [11] => Set-Cookie: SC_ANALYTICS_GLOBAL_COOKIE=323F079A90B545F39F8A6A9EB9B919DB; expires=Fri, 26-Oct-2012 17:44:57 GMT; path=/
    [12] => Set-Cookie: SC_ANALYTICS_SESSION_COOKIE=118B88825A054BA1BAF327B0561C3EBB,1; path=/
    [13] => X-Powered-By: ASP.NET
    [14] => Date: Thu, 27 Oct 2011 17:44:57 GMT
    [15] => Connection: close
    [16] => Content-Length: 169581
)

Ответы [ 2 ]

0 голосов
/ 27 октября 2011

Я думаю, что проблема в заголовках Cache-Control.См. MSKB # 323308 .Несмотря на его название, я обнаружил несколько постов в Интернете, которые предполагают, что отсутствие кэширования при загрузке файлов может привести к сбою веб-сайтов, не поддерживающих SSL, в Internet Explorer.Я бы попытался добавить значение реестра BypassHTTPNoCacheCheck, которое предлагает статья в КБ, - если оно сработает, вам нужно будет удалить заголовки кэширования из вашего ответа.

0 голосов
/ 27 октября 2011

Попробуйте это (вместо BinaryWrite) ... (вы всегда можете поменять MemoryStream на FileStream, если файлы не находятся непосредственно на диске).

            byte[] buffer = new byte[4096];
            using (Stream s = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                int bytes;
                while ((bytes = s.Read(buffer, 0, buffer.Length)) > 0)
                {
                    Response.OutputStream.Write(buffer, 0, bytes);
                }
            }
            Response.Flush();
...