UT010006:无法调用getWriter(),已调用getOutputStream()

时间:2017-10-13 10:12:35

标签: java file jsf download

我在尝试下载文件时收到此错误消息:

无法处理异常!:java.lang.IllegalStateException:UT010006:无法调用getWriter(),getOutputStream()已经调用。

文件已下载但没有扩展名。所以浏览器问我应该用什么程序来阅读它。

这是我的下载代码:

    InputStream fileIs = null;
    OutputStream output = null;
    try {            
        ExternalContext externalContext = getContext().getExternalContext();
        externalContext.responseReset();
        externalContext.setResponseContentType(fileToDownload.getMetadata().getMimeType());
        externalContext.setResponseContentLength(fileToDownload.getMetadata().getTaille().intValue());
        externalContext.setResponseHeader("Content-Disposition", "attachment; filename=\"" + fileToDownload.getMetadata().getFileName() + "\"");

        output = externalContext.getResponseOutputStream();
        Response repGetFile = ClientBuilder.newClient()
                 .target(fileToDownload.getMetadata().getFileURL())
                 .request().header("Authorization", "Bearer bearercode")
                 .get();

        fileIs = repGetFile.readEntity(InputStream.class);
        int readBytes;
        byte[] buffer = new byte[1024];
        while((readBytes = fileIs.read(buffer)) > 0){
            output.write(buffer, 0, readBytes);
        }
        output.flush();

    } catch (IOException ex) {
        LOG.log(Level.SEVERE, null, ex);
    } finally{
        try {
            fileIs.close();
            output.close();
        } catch (IOException ex) {
            LOG.log(Level.INFO, null, ex);
        }
    } 

2 个答案:

答案 0 :(得分:0)

我相信问题是你只能在try体中输出.flush()文件。仅当稍后在finally体中创建的异常(也包含在另一个try体中)时,该文件才会关闭。我相信你应该在第一次冲洗后关闭输出。

 output.flush();
 output.close();

答案 1 :(得分:0)

你忘记了致电:

getContext().responseComplete();

设置标题后。