package br.usp.ime.academicdevoir.arquivos; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.servlet.ServletContext; import org.apache.commons.io.IOUtils; import br.com.caelum.vraptor.interceptor.download.FileDownload; import br.com.caelum.vraptor.interceptor.multipart.UploadedFile; import br.com.caelum.vraptor.ioc.Component; import br.com.caelum.vraptor.ioc.SessionScoped; import br.usp.ime.academicdevoir.infra.UsuarioSession; @Component @SessionScoped public class Arquivos { private File pastaDeArquivos; private UsuarioSession usuarioSession; private ServletContext context; public File getPastaDaQuestao(Long idDaQuestao) { return new File(pastaDeArquivos, "//" + usuarioSession.getUsuario().getLogin() + "//" + idDaQuestao); } public String getCaminhoReal(String diretorio) { return context.getRealPath("WEB-INF//" + diretorio + "//"); } public Arquivos(ServletContext context, UsuarioSession usuarioSession) { this.context = context; String caminho = getCaminhoReal("arquivos"); pastaDeArquivos = new File(caminho); pastaDeArquivos.mkdirs(); this.usuarioSession = usuarioSession; } public void salva(UploadedFile arquivo, Long idDaQuestao) { File pastaDaQuestao = getPastaDaQuestao(idDaQuestao); if (!pastaDaQuestao.mkdirs()) { for (File arq : pastaDaQuestao.listFiles()) { arq.delete(); } } File destino = new File(pastaDaQuestao, arquivo.getFileName()); try { IOUtils.copyLarge(arquivo.getFile(), new FileOutputStream(destino)); } catch (IOException excecao) { throw new RuntimeException("Erro ao salvar arquivo", excecao); } } public FileDownload carrega(String caminho) { File pasta = new File(pastaDeArquivos, caminho); File arquivo = pasta.listFiles()[0]; return new FileDownload(arquivo, "text/plain", "\"" + arquivo.getName() + "\"", true); } }