附件的 HTTP 响应标头内容处置
2022-09-02 01:34:17
背景
将 XML 文档写入浏览器的响应流,并使浏览器显示“另存为”对话框。
问题
请考虑以下方法:download()
HttpServletResponse response = getResponse();
BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(
response.getOutputStream() ) );
String filename = "domain.xml";
String mimeType = new MimetypesFileTypeMap().getContentType( filename );
// Prints "application/octet-stream"
System.out.println( "mimeType: " + mimeType );
// response.setContentType( "text/xml;charset=UTF-8" );
response.setContentType( mimeType );
response.setHeader( "Content-Disposition", "attachment;filename="
+ filename );
bw.write( getDomainDocument() );
bw.flush();
bw.close();
在 Firefox 中,XML 内容显示在浏览器窗口中。在 IE 7 中,不显示 XML 内容 - 您必须查看文档源。这两种情况都不是预期的结果。
网页对按钮使用以下代码:
<a4j:commandButton action="#{domainContent.download}" value="Create Domain" reRender="error" />
生成的 XML 不以 开头,而是 XML 内容类似于:<?xml version="1.0"?>
<schema xmlns="http://www.jaspersoft.com/2007/SL/XMLSchema" version="1.0">
<items>
<item description="EDT Class Code" descriptionId="" label="EDT Class Code" labelId="" resourceId="as_pay_payrolldeduction.edtclass"/>
</items>
<resources>
<jdbcTable datasourceId="JNDI" id="as_pay_payrolldeduction" tableName="as_pay.payrolldeduction">
<fieldList>
<field id="payamount" type="java.math.BigDecimal"/>
</fieldList>
</jdbcTable>
</resources>
</schema>
更新 #1
请注意以下代码行:
response.setHeader( "Content-Disposition", "attachment;filename=" + filename );
更新 #2
使用是问题所在;定期按预期执行。使用 可防止 刷新任何错误消息。<a4j:commandButton ... />
<h:commandButton .../>
<h:commandBUtton .../>
<a4j:outputPanel .../>
相关接缝消息。
哑剧类型
以下 MIME 类型不会触发“另存为”对话框:
"application/octet-stream"
"text/xml"
"text/plain"
问题
哪些更改将导致 触发“另存为”对话框,以便提示用户将 XML 文件另存为 (作为 )?a4j:commandButton
domain.xml
谢谢。