Http 下载带有重定向的文件
我试图让用户能够下载一个文件Http 下载带有重定向的文件,http,jsf,download,Http,Jsf,Download,我试图让用户能够下载一个文件 <h:commandLink value="yes" actionListener="#{Bean.readFileFromServer}"/> 下载的文件是压缩的zip文件,我有两个问题,第一个有时有效,有时无效,我不知道为什么行为不一致。第二个问题如果有任何异常,页面被重定向,这是由于我的结构设计不可接受的,我需要这个工作的每一次,在任何问题的网页将不会重定向 不要认为HTTP可以做到这一点。重定向头与下载头不同,因此我担心您无法在同一请求中执行重
<h:commandLink value="yes" actionListener="#{Bean.readFileFromServer}"/>
下载的文件是压缩的
zip
文件,我有两个问题,第一个有时有效,有时无效,我不知道为什么行为不一致。第二个问题如果有任何异常,页面被重定向,这是由于我的结构设计不可接受的,我需要这个工作的每一次,在任何问题的网页将不会重定向 不要认为HTTP可以做到这一点。重定向头与下载头不同,因此我担心您无法在同一请求中执行重定向头。你最好的办法是换一种方式,稍后重定向并下载文件:@Xtreme:标题的格式很糟糕。就我所理解的问题而言,OP只是不想在出现异常时导致“重定向”(到错误页面)。@BalusC我想要的是在出现异常时重定向。你字面上说这是“不可接受的”?很抱歉我搞糊涂了,你是对的,我无论如何都不需要重定向,如果一切正常,只需显示“另存为”弹出窗口,如果出现异常,则不显示任何内容
public void exportList() throws IOException {
FacesContext fc = FacesContext.getCurrentInstance();
fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
ec.responseReset();
try {
userLogger.info("Exposting report ");
ec.setResponseContentType("application/octet-stream"); // Check
ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + result.getFileName() + "\"");
OutputStream output = ec.getResponseOutputStream();
int octet;
while ((octet = input.read()) != -1) {
output.write(octet);
}
input.close();
output.close();
fc.responseComplete();
} catch (Exception e) {
e.printStackTrace();
}
}