Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package controller; import br.com.caelum.vraptor.Controller; //import br.com.caelum.vraptor.Path; import br.com.caelum.vraptor.Result; import br.com.caelum.vraptor.observer.download.ByteArrayDownload; import br.com.caelum.vraptor.observer.download.Download; import br.com.caelum.vraptor.observer.upload.UploadedFile; import br.com.caelum.vraptor.validator.SimpleMessage; import br.com.caelum.vraptor.validator.Validator; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import javax.inject.Inject; import javax.servlet.ServletContext; import javax.validation.Valid; import model.Galeria; import model.Imagem; import org.apache.commons.io.IOUtils; import persistencia.GaleriaDao; import persistencia.ImagemDao; import sessao.UsuarioSessao; /** * * @author Rael */ @Controller public class GaleriaController { //para o realPath //private ServletContext servletContext; /* public GaleriaController(ServletContext servletContext) { this.servletContext = servletContext; } */ @Inject private Validator validator; @Inject private ServletContext servletContext; @Inject private Result result; @Inject private UsuarioSessao sessao; @Inject private GaleriaDao galeriaDao; @Inject private ImagemDao imagemDao; private static final List<String> ACCEPTED_TYPES = Arrays.asList("image/jpeg", "image/png", "image/bmp", "image/gif"); static final String UPLOAD_DIR = "uploads"; public void addImagem(@Valid Imagem imagem, long galeriaId, UploadedFile file) throws FileNotFoundException, IOException { if (!sessao.getIdsPermitidosDeGalerias().contains(galeriaId)) { result.redirectTo(UsuarioController.class).listaGalerias(); } else { if (null != file) { //String extensao = file.getFileName().substring(file.getFileName().indexOf("."), file.getFileName().length()); String tipo = file.getContentType(); validator.ensure(ACCEPTED_TYPES.contains(tipo), new SimpleMessage("imagem", "Erro: tipo ilegal de imagem")); validator.onErrorRedirectTo(UsuarioController.class).viewGaleria(galeriaId); String extensao = tipo.split("/")[1]; imagem.setExtensao(extensao); imagem.setGaleria(galeriaDao.getById(galeriaId)); Long id = imagemDao.saveReturningId(imagem); String realPath = servletContext.getRealPath("/");//"/home/aluno/Galeria/src/main/webapp"; String fullName = realPath + "/" + UPLOAD_DIR + "/" + id + "." + extensao; File f = new File(fullName); IOUtils.copyLarge(file.getFile(), new FileOutputStream(f)); //result.include("mensagem", "O arquivo foi adicionado"); this.result.redirectTo(UsuarioController.class).viewGaleria(galeriaId); } else { result.include("mensagem", "Nenhum arquivo foi selecionado..."); this.result.forwardTo(UsuarioController.class).viewGaleria(galeriaId); } } } public void editImagem(@Valid Imagem imagem) { long galeriaId = imagemDao.getById(imagem.getId()).getGaleria().getId(); validator.ensure(sessao.getIdsPermitidosDeGalerias().contains(galeriaId), new SimpleMessage("galeria", "Acesso negado")); validator.onErrorRedirectTo(UsuarioController.class).viewGaleria(galeriaId); imagemDao.edit(imagem.getId(), imagem.getNome(), imagem.getDescricao()); result.redirectTo(UsuarioController.class).viewGaleria(galeriaId); } @br.com.caelum.vraptor.Path("galeria/deleteImagem/{id}/") public void deleteImagem(Long id) { Imagem imagem = imagemDao.getById(id); long galeriaId = imagem.getGaleria().getId(); validator.ensure(sessao.getIdsPermitidosDeGalerias().contains(galeriaId), new SimpleMessage("galeria", "Acesso negado")); validator.onErrorRedirectTo(UsuarioController.class).viewGaleria(galeriaId); imagemDao.softDelete(id); result.redirectTo(UsuarioController.class).viewGaleria(galeriaId); } @br.com.caelum.vraptor.Path("galeria/zipGaleria/{galeriaId}") public Download zipGaleria(long galeriaId) { validator.ensure(sessao.getIdsPermitidosDeGalerias().contains(galeriaId), new SimpleMessage("galeria", "Acesso negado")); Galeria galeria = new Galeria(); galeria.setId(galeriaId); List<Imagem> imagens = imagemDao.listByGaleria(galeria); validator.addIf(imagens == null || imagens.isEmpty(), new SimpleMessage("galeria", "Galeria vazia")); validator.onErrorRedirectTo(UsuarioController.class).viewGaleria(galeriaId); List<Path> paths = new ArrayList<>(); for (Imagem imagem : imagens) { String realPath = servletContext.getRealPath("/"); java.nio.file.Path imagemPath = new File(realPath + "/" + UPLOAD_DIR + "/" + imagem.getFileName()) .toPath(); paths.add(imagemPath); } byte buffer[] = new byte[2048]; try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); ZipOutputStream zos = new ZipOutputStream(baos)) { zos.setMethod(ZipOutputStream.DEFLATED); zos.setLevel(5); for (Path path : paths) { try (FileInputStream fis = new FileInputStream(path.toFile()); BufferedInputStream bis = new BufferedInputStream(fis)) { String pathFileName = path.getFileName().toString(); zos.putNextEntry(new ZipEntry(pathFileName)); int bytesRead; while ((bytesRead = bis.read(buffer)) != -1) { zos.write(buffer, 0, bytesRead); } zos.closeEntry(); zos.flush(); } catch (IOException e) { result.include("mensagem", "Erro no download do zip"); result.forwardTo(UsuarioController.class).viewGaleria(galeriaId); return null; } } zos.finish(); byte[] zip = baos.toByteArray(); Download download = new ByteArrayDownload(zip, "application/zip", sessao.getUsuario().getNome() + ".zip"); return download; //zipDownload = new ZipDownload(sessao.getUsuario().getNome() + ".zip", paths); //return zipDownloadBuilder.build(); } catch (IOException e) { result.include("mensagem", "Erro no download do zip"); result.forwardTo(UsuarioController.class).viewGaleria(galeriaId); return null; } } }