gpt4 book ai didi

excel - 使用Internet Explorer打开JasperReports Server/Tomcat的文件内容资源(Excel)将内联显示二进制数据

转载 作者:行者123 更新时间:2023-11-28 22:57:59 24 4
gpt4 key购买 nike

Content-Type / Accept / MIME HTTP标头有问题?
JasperReports Server(5.2.0)(更新2014-08-20 / 21:5.5.0和5.6.0相同)
在Tomcat 7上运行
客户尝试过


IE浏览器


5.2.0测试(下面是默认设置)


9.0.8112.16421 64位(默认设置如下)
11.0.9600.17105 64位

5.5.0测试(更新2014-08-20)


8.0.7601.17514
9.0.8112.16421
10.0.9200.16384


Firefox 28.0
铬(34.0.1847.131 m)



如果我在JasperReports Server Web GUI中导航到以前上传的Inhaltsresource(内容资源)*。xlsx Excel文档,则可以通过提供保存或打开文件的方式在Firefox和Chrome中正常运行,但在Internet Explorer中却无法运行,通过在选项卡中显示文件的二进制内容:-(

我做了相当多的研究,但找不到明确的原因,尽管有些观点可能指出了原因:

(更一般的观察:)


IE / Jasper GUI发送的HTTP请求标头(ACCEPT字符串)似乎错误/不完整/与IE不兼容


(因此)Jasper Servlets HTTP响应标头(Content-Type字符串)似乎错误/不完整/与IE不兼容



(在更深入地思考时:)


JasperServer本身(或在一定程度上将Tomcat作为容器交付)不应该尝试确定要交付的内容类型吗?


要么让用户手动设置它,要么通过启发式方法(文件扩展名,内容解析等)确定更好。


这样,它也可以与文件一起存储(我只在用户想覆盖启发式确定类型的结果时才这样做)

因为文件名或URL已经很容易表明它是* .xlsx文件,并且内容以PK...开头,所以它已经强烈表明它确实是(ZIP压缩)Excel文件。
所以我会看到一般应该使用两种基本方法...


请求标头(Jasper交付的GUI页面)应显式定义内容类型(也许,如果响应功能本身无法轻松确定内容类型)
(通常可能更合适:)响应标头(Jasper / Tomcat服务器逻辑)应显式设置请求的,正确的或估计的内容类型


查看IE或FF的标头响应,可以清楚地看到此处没有设置Content-Type,尽管在​​更深处的REST-API调用中已将其设置为application/octet-stream;charset=UTF-8(并在此处工作)





以下是我已经检查过的详细信息:


好的:FF和IE的HTTP响应标头对我来说没有太大区别(尽管请求标头有很大不同)(请参见下文),因此表明结果内容检测的神奇之处(其中FF和Chrome似乎更好)在这种情况下)
IE和FF请求/响应周期的HTTP标头:


IE 9(使用板载开发工具捕获):


请求头

Anforderung        GET http://...:8080/jasperserver/fileview/fileview/....xlsx? HTTP/1.1
Accept application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Accept-Language de-DE
User-Agent Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
UA-CPU AMD64
Accept-Encoding gzip, deflate
Host ...:8080
Proxy-Connection Keep-Alive
Cookie userTimezone=Europe/Berlin; JSESSIONID=0FEF6E9F46EB2202A041A0A6F37B249A; userLocale=de_DE; treefoldersTree=1%7Copen%3B4%7Copen%3B5%7Copen%3B8%7Copen%3B; lastFolderUri=/...

响应头

Antwort             HTTP/1.0 200 OK
Server Apache-Coyote/1.1
Cache-Control no-store
Expires Thu, 01 Jan 1970 01:00:00 CET
P3P CP="ALL"
Pragma
Content-Language de-DE
Content-Length 453242
Date Thu, 08 May 2014 10:54:46 GMT
X-Cache MISS from ..some-proxy-host..
X-Cache-Lookup MISS from ..some-proxy-host..:8080
Via 1.1 ..some-proxy-host..:8080 (squid/2.7.STABLE8)
Connection keep-alive
Proxy-Connection keep-alive


FF(使用HttpFox插件捕获)


请求头

(Request-Zeile)    GET /jasperserver/fileview/fileview/....xlsx? HTTP/1.1
Host viasaxinfo.list.smwa.sachsen.de:8080
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language de,en-US;q=0.7,en;q=0.3
Accept-Encoding gzip, deflate
Referer http://...:8080/jasperserver/flow.html?_flowId=searchFlow
Cookie userLocale=de; userTimezone=Europe/Berlin; JSESSIONID=E3989F65A4198047DA87FBB7BB73ABBA; treefoldersTree=1%7Copen%3B4%7Copen%3B5%7Copen%3B8%7Copen%3B; lastFolderUri=/...
Connection keep-alive

响应头

(Status-Zeile)    HTTP/1.0 200 OK
Server Apache-Coyote/1.1
Cache-Control no-store
Expires Thu, 01 Jan 1970 01:00:00 CET
P3P CP="ALL"
Content-Language de
Content-Length 453242
Date Thu, 08 May 2014 11:00:48 GMT
X-Cache MISS from ..some-proxy-host..
X-Cache-Lookup MISS from ..some-proxy-host..:8080
Via 1.1 ..some-proxy-host..:8080 (squid/2.7.STABLE8)
Connection keep-alive
Proxy-Connection keep-alive



好的:IE中的兼容性视图没有帮助
检查潜在的HTTP响应问题(有所不同)


Pragma:应具有与 Cache-Control: Public相同的含义


What does the HTTP header Pragma: Public mean?

Content-Language:我猜这里没关系

检查潜在的HTTP请求问题


请求标头行的顺序无关紧要
Accept:有问题吗?


看看规格 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html似乎还可以

Accept-Language:没关系
Cookie:内容无关紧要
Proxy-Connection:禁用/启用代理设置不会更改某些内容

ok: tomcat7/conf/web.xml中的MIME类型设置

<mime-mapping>
<extension>xlsx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</mime-type>
</mime-mapping>



放在 jasperserver/WEB-INF/web.xml下也无济于事
有关此的更多详细信息,也可以在这里找到:


http://blogs.adobe.com/techcomm/2012/11/handling-xlsx-docx-and-pptx-baggage-files-when-publishing-to-robohelp-server.html
http://filext.com/faq/office_mime_types.php


使用 Rest API.../jasperserver/rest/resource/...)在FF和IE中均可使用


IE 9:


使用 fileData=true(在打开按预期方式工作时会打开一个对话框,用于打开或保存文件)


HTTP请求头

Anforderung        GET http://...:8080/jasperserver/rest/resource/....xlsx?fileData=true HTTP/1.1
Accept text/html, application/xhtml+xml, */*
Accept-Language de-DE
User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
UA-CPU AMD64
Accept-Encoding gzip, deflate
Host ...:8080
Proxy-Connection Keep-Alive
Cookie userTimezone=Europe/Berlin; userLocale=de_DE; JSESSIONID=1B91EC2172C438C51A551CB967A3148D; treefoldersTree=1%7Copen%3B4%7Copen%3B5%7Copen%3B7%7Copen%3B10%7Copen%3B; lastFolderUri=...; foldersPanelWidth=239

HTTP响应头

Antwort          HTTP/1.0 200 OK
Server Apache-Coyote/1.1
Cache-Control private
Expires Thu, 01 Jan 1970 01:00:00 CET
P3P CP="ALL"
Content-Disposition attachment; filename=....xlsx
Content-Type application/octet-stream;charset=UTF-8
Date Fri, 09 May 2014 12:44:05 GMT
X-Cache MISS from LIST-SRV-PROXY03
X-Cache-Lookup MISS from LIST-SRV-PROXY03:8080
Via 1.1 ...some-proxy-host...:8080 (squid/2.7.STABLE8)
Connection close


无需 fileData=true返回预期的资源元数据XML(内联显示)

<resourceDescriptor name="....xlsx" wsType="contentResource" uriString="/....xlsx" isNew="false">
<label><![CDATA[....xlsx]]></label>
<creationDate>1399636098445</creationDate>
<resourceProperty name="PROP_RESOURCE_TYPE">
<value><![CDATA[com.jaspersoft.jasperserver.api.metadata.common.domain.ContentResource]]></value>
</resourceProperty>
<resourceProperty name="PROP_PARENT_FOLDER">
<value><![CDATA[/...]]></value>
</resourceProperty>
<resourceProperty name="PROP_VERSION">
<value><![CDATA[0]]></value>
</resourceProperty>
<resourceProperty name="PROP_SECURITY_PERMISSION_MASK">
<value><![CDATA[1]]></value>
</resourceProperty>
<resourceProperty name="CONTENT_TYPE">
<value><![CDATA[contentResource]]></value>
</resourceProperty>
<resourceProperty name="DATA_ATTACHMENT_ID">
<value><![CDATA[/....xlsx]]></value>
</resourceProperty>
</resourceDescriptor>





我花了很多时间,但是谷歌搜索(我想知道为什么其他人似乎都没有这个问题,尽管在我看来这很普遍)或各种调试都没有帮助。也许我将不得不详细研究相关的Jasper类以进一步调试,但也许其他人也遇到了这个问题或知道解决方案?

最佳答案

似乎存在手动解决方法:http://community.jaspersoft.com/jasperreportsr-server/issues/3716#comment-808481


  在知道MIME类型设置错误的情况下,我们实现了一个servlet过滤器类来尝试设置响应的Content-Disposition标头。由于我们知道响应在由Web服务端点处理之后已刷新,因此将处理之前的标头设置为Content-Disposition: attachment; filename='filename.extension'。事实证明这是可行的,并且我们能够下载具有适当文件扩展名的文件。


但他们也提到它可以在v5.6.0上使用,尽管在我们的测试中没有(请参见上面的评论:Opening file content resource (Excel) of JasperReports Server / Tomcat with Internet Explorer displays binary data inline


  v5.6.0,显然在此版本上,响应的MIME类型已正确设置,因此我们终于找到了解决问题的合适方法。

关于excel - 使用Internet Explorer打开JasperReports Server/Tomcat的文件内容资源(Excel)将内联显示二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23567429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com