업로드 된 이미지를 저장하려고 할 때 Stream is closed Exception
이 표시됩니다. 업로드하기 전에 미리 저장하려고합니다. graphicImage
. 이 작업이 진행 중입니다. 하지만 이미지를 저장할 수 없습니다. 여기 내 코드는 다음과 같습니다.스트림 닫힘 예외
private InputStream in;
private StreamedContent filePreview;
// getters and setters
public void upload(FileUploadEvent event)throws IOException {
// Folder Creation for upload and Download
File folderForUpload = new File(destination);//for Windows
folderForUpload.mkdir();
file = new File(event.getFile().getFileName());
in = event.getFile().getInputstream();
filePreview = new DefaultStreamedContent(in,"image/jpeg");
FacesMessage msg = new FacesMessage("Success! ", event.getFile().getFileName() + " is uploaded.");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void setFilePreview(StreamedContent fileDownload) {
this.filePreview = fileDownload;
}
public StreamedContent getFilePreview() {
return filePreview;
}
public void saveCompanyController()throws IOException{
OutputStream out = new FileOutputStream(getFile());
byte buf[] = new byte[1024];
int len;
while ((len = in.read(buf)) > 0)
out.write(buf, 0, len);
FileMasterDO fileMasterDO=new FileMasterDO();
fileMasterDO.setFileName(getFile().getName());
fileMasterDO.setFilePath(destination +file.getName());
fileMasterDO.setUserMasterDO(userMasterService.findUserId(UserBean.getUserId()));
fileMasterDO.setUpdateTimeStamp(new Date());
in.close();
out.flush();
out.close();
fileMasterService.save(filemaster);
}
빈은 세션 범위에 있습니다.
나는 데이터베이스에 이미지를 저장하지 않을 것이다. 나는 단지 경로 만 저장해야한다. – Arunprasad
이 댓글과 질문 및 답변의 관계가 확실하지 않습니다. 구체적인 문제를 이해 했습니까? 'InputStream'을 두 번 읽습니다 ('upload()'메쏘드와'saveCompanyController()'메쏘드에서 한번씩). 이건 불가능 해. 한 번만 읽을 수 있습니다. 이것을'byte []'로 읽어 들여 원하는만큼 여러 번 읽고 다시 사용할 수 있습니다. – BalusC
나는 그것을 올바르게 고치는 법에 대한 구체적인 예를 들어 답을 확장했다. – BalusC