Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 下载带有重定向的文件_Http_Jsf_Download - Fatal编程技术网

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();
        }

    }