Olha só. Usei o primefaces para o file upload, da seguinte forma:
<p:fileUpload fileLimit="10" fileUploadListener="#{administracao.handleFileUpload}" mode="advanced" update="info" multiple="true" sizeLimit="5242880" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" fileLimitMessage="#{msg.fileUploadErroLimite}" cancelLabel="#{msg.fileUploadCancelarLabel}" invalidFileMessage="#{msg.fileUploadErroArquivoInvalido}" invalidSizeMessage="#{msg.fileUploadErroLimite}" label="#{msg.fileUploadChooseLabel}" />
Então eu pego o conteudo (byte[]) e salvo em um bean de Imagem.
public void handleFileUpload(FileUploadEvent event){
UploadedFile item = event.getFile();
for(Imagem img : getNoticia().getImagens()){
if(img.getNome().equals(item.getFileName())){
String[] params = new String[1];
params[0] = img.getNome();
FacesContextUtil.setMensagemErro("fileUploadArquivoExiste", formSettings.getLocalAtual(), FacesMessage.SEVERITY_WARN, params);
return;
}
}
Imagem imagem = new Imagem();
imagem.setLength(new Long(item.getContents().length));
imagem.setNome(item.getFileName());
imagem.setArquivo(item.getContents());
imagem.setData(new Date());
imagem.setMime(item.getContentType());
noticia.getImagens().add(imagem);
}
Esse ‘arquivo’ é do tipo ‘byte[]’.
Então eu tenho um método para criar o thumbnail, retornando byte[], da seguinte forma:
public byte[] getThumbnail(){
ImageIcon imageIcon = new ImageIcon(arquivo);
Image inImage = imageIcon.getImage();
double scale = (double) MAX_THUMBNAIL_WIDTH / (double) inImage.getWidth(null);
int scaledW = (int) (scale * inImage.getWidth(null));
int scaledH = (int) (scale * inImage.getHeight(null));
BufferedImage outImage = new BufferedImage(scaledW, scaledH, BufferedImage.TYPE_INT_RGB);
AffineTransform tx = new AffineTransform();
if(scale < 1.0d){
tx.scale(scale, scale);
}
Graphics2D g2d = outImage.createGraphics();
g2d.drawImage(inImage, tx, null);
g2d.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ImageIO.write(outImage, mime.substring(6), baos);
return baos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
finally{
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
Sendo que ‘MAX_THUMBNAIL_WIDTH’ é uma variável ‘final’ com a quantidade de pixels q eu quero meu thumbnail (no caso, está 100).