gpt4 book ai didi

java - 附件的 HTTP 响应 header 内容处置

转载 作者:IT老高 更新时间:2023-10-28 20:52:53 24 4
gpt4 key购买 nike

背景

将 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 version="1.0"?> 开头,而是 XML 内容类似于:

<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 .../>从刷新任何错误消息。

相关 Seam Message .

Mime 类型

以下 mime 类型不会触发“另存为”对话框:

  • "application/octet-stream"
  • "text/xml"
  • "text/plain"

问题

哪些变化会导致a4j:commandButton触发“另存为”对话框,提示用户保存 XML 文件(为 domain.xml)?

谢谢。

最佳答案

不使用内联;也不是附件;只需使用

response.setContentType("text/xml");
response.setHeader( "Content-Disposition", "filename=" + filename );

response.setHeader( "Content-Disposition", "filename=\"" + filename + "\"" );

response.setHeader( "Content-Disposition", "filename=\"" + 
filename.substring(0, filename.lastIndexOf('.')) + "\"");

关于java - 附件的 HTTP 响应 header 内容处置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5278975/

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