Primefaces graphicImage流未关闭,文件已锁定

时间:2016-11-29 18:03:33

标签: jsf primefaces jsf-2 filestream graphicimage

我使用primefaces上传图片,裁剪图片然后在graphicImage上显示最终图片。

这个过程运行正常,但问题是当我检索要在graphicImage上显示的最终图像时,流没有关闭,文件被java.exe阻止,所以我遇到了问题删除文件/目录时,例如当用户注销时,因为它只是一个临时目录。

这是我的StreamedContent的吸气剂:

public StreamedContent getGraphicCropped() {
    try{
        if (newImageName != null) {
            File file2 = new File(pathCroppedImage);
            InputStream input = new FileInputStream(file2);
            graphicCropped = new DefaultStreamedContent(input);
            showImageFinal = true;
        }

    } catch(Exception e){
        e.printStackTrace();
    }

    return graphicCropped;
}

如果我执行input.close();,那么我就可以删除该文件,但不会显示该文件,因为我知道这个getter在生命周期中被多次调用。

1 个答案:

答案 0 :(得分:0)

我通过使用StreamedContent的建议getter来解决它:

public StreamedContent getGraphicCropped() throws FileNotFoundException {

    FacesContext context = FacesContext.getCurrentInstance();

    if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
        // So, we're rendering the HTML. Return a stub StreamedContent so that it will generate right URL.
        return new DefaultStreamedContent();
    }
    else {
        // So, browser is requesting the image. Return a real StreamedContent with the image bytes.
        File file2 = new File(pathCroppedImage);
        InputStream input = new FileInputStream(file2);
        showImageFinal = true;
        return new DefaultStreamedContent(input);
    }
}