2

我有一个简单的 Spring MVC 控制器方法来返回 PDF:

@RequestMapping(value="/attachment/portfolios/{investorNum}/reports/{reportId}/periods/{reportingPeriod}")
    public ResponseEntity<byte[]>  getReportForDownload(@PathVariable String reportId, @PathVariable long investorNum, @PathVariable long reportingPeriod) throws IOException{
        InputStream in = servletContext.getResourceAsStream("/sample.pdf");
        final HttpHeaders headers = new HttpHeaders();
        //headers.setContentType(MediaType.valueOf("application/pdf"));
        headers.add("Content-Type", "application/pdf");
        headers.add("Content-disposition", "attachment; filename=abcd.pdf");
        return new ResponseEntity<byte[]>(IOUtils.toByteArray(in), headers, HttpStatus.CREATED);
    }

还有一个弹簧字节数组消息转换器:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
       <property name="messageConverters">
         <util:list>
                <bean id="byteArrayMessageConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
         </util:list>
         </property>
    </bean>

还有一个 jQuery 模态框供下载:

"Download" : function() {
 location.href = "./attachment/portfolios/2201/reports/DELINQSUM/periods/1137";
}

下载按钮在 FF、Chrome 中非常好用,但在 IE 中却不行。IE 说

Internet Explorer 无法从 localhost 下载 1137。

Internet Explorer 无法打开此 Internet 站点。请求的站点不可用或找不到。请稍后再试。

我按照http://support.microsoft.com/kb/3164312中的标题进行操作,但没有任何反应,IE 继续报告问题。

此外,我正在通过以下更改在模态内流式传输 PDF 以进行嵌入式显示,并且效果很好:

headers.add("Content-disposition", "inline; filename=abcd.pdf");

我在tomcat上运行它。

非常感谢任何帮助。

4

1 回答 1

1

我有同样的问题。我正在使用 Apache FOP 生成一个 PDF,并以 Spring 方式将其写入响应,其中的标头与ResponseEntity. 我通过在构造函数中选择HttpStatus.OK而不是解决了这个问题。HttpStatus.CREATEDResponseEntity

显然 IE8 不理解 201 (CREATED) 作为响应代码。

于 2014-03-02T17:09:58.860 回答