我使用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在生命周期中被多次调用。
答案 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);
}
}