1

我们的应用程序基于 Spring 框架构建,并且托管在 WAS 6.1 上。它是为 Internet Explorer 6 设计的(作为使用 IE 6 的用户)。它通过控制器通过 AJAX 通信打开一个 pdf 文件。在后台它调用一个 mq 来获取 byte[]。它写在响应的 bufferedOutputStream 中。

它在开发和测试环境中运行良好,但在生产环境中并不总是运行良好。它有时会打开,有时不会。(对于负载平衡,我们有超过 1 个服务器。)

有时请求查询字符串是在文件名中设置的,当尝试保存附件时,它会在弹出窗口中给出以下错误消息:

“互联网无法下载......来自 abc.com 的 URL 文件无法写入缓存”

PFB 代码:

    byte[] letterByteArr = null;
    letterByteArr = fetchFromMQ();
    bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
                response.reset();
                response.setContentType(application/pdf);
                response.setHeader(Content-disposition, attachment; filename=LP.pdf);
                int length = letterByteArr.length;
                response.setContentLength(length);                  
                bufferedOutputStream.write(letterByteArr, 0, length);
                bufferedOutputStream.flush();   

类似的代码在另一个运行在不同 jvm 中的应用程序中运行良好。

如果在您的代码实施过程中遇到此问题,任何人都可以提出可能的解决方案吗?WAS、网络、IE 或 Abode 中可能存在的问题在哪里?

4

2 回答 2

1

这听起来很像http://support.microsoft.com/kb/812935。问题是,当Cache-Control和/或Pragma标头设置为no-cache.

添加以下响应标头:

response.setHeader("Cache-Control", "public");
response.setHeader("Pragma", "public");
于 2011-09-15T13:48:24.793 回答
0

我面临同样的问题,我添加了响应头来解决这个问题。但我不得不删除response.reset();; 只有在那之后,下载问题才不会发生。

我不知道这背后的原因,但它正在工作。

唯一的问题是 excel 的数据与我的应用程序中 pdf 字段中的数据不同。

于 2012-07-30T06:12:34.637 回答