--- title: Download e Upload --- #Exemplo de 1 minuto: download O exemplo a seguir mostra como disponibilizar o download para seu cliente. Note novamente a simplicidade na implementação: ~~~ #!java @Controller public class PerfilController { public File foto(Perfil perfil) { return new File("/path/para/a/foto." + perfil.getId()+ ".jpg"); } } ~~~ ##Adicionando mais informações no download Se você quiser adicionar mais informações ao download você pode retornar um `FileDownload`: ~~~ #!java @Controller public class PerfilController { public Download foto(Perfil perfil) { File file = new File("/path/para/a/foto." + perfil.getId()+ ".jpg"); String contentType = "image/jpg"; String filename = perfil.getNome() + ".jpg"; return new FileDownload(file, contentType, filename); } } ~~~ Você pode também usar a implementação `InputStreamDownload` para trabalhar diretamente com Streams ou `ByteArrayDownload` para array de bytes. ##Upload Para ativar o suporte a upload é necessário adicionar as bibliotecas `commons-upload` e `commons-io` em seu classpath. Veja mais informações [aqui](/pt/dependencias-e-pre-requisitos). #Exemplo de 1 minuto: upload O primeiro exemplo será baseado na funcionalidade de upload multipart. ~~~ #!java @Controller public class PerfilController { @Inject private final PerfilDao dao; public void atualizaFoto(Perfil perfil, UploadedFile foto) { try (InputStream input = file.getFile()) { dao.atribui(input, perfil); } } } ~~~ ##Mais sobre Upload O UploadedFile retorna o arquivo como um `InputStream`. Se você quiser copiar para um arquivo no disco facilmente, basta usar a classe `Files` do Java 7: ~~~ #!java public void atualizaFoto(Perfil perfil, UploadedFile foto) { try (InputStream input = file.getFile()) { File fotoSalva = new File(); Files.write(input, fotoSalva); dao.atribui(fotoSalva, perfil); } } ~~~ ##Sobrescrevendo as configurações de upload Você pode alterar as configurações de upload sobrescrevendo a classe `MultipartConfig`. No exemplo abaixo é alterado o tamanho máximo de upload. ~~~ #!java @Specializes @ApplicationScoped public class CustomMultipartConfig extends DefaultMultipartConfig { public long getSizeLimit() { return 50 * 1024 * 1024; // 50MB } } ~~~ ##Alterando o formulário de envio Para que o browser possa fazer o upload corretamente, você precisa adicionar o atributo enctype para multipart/form-data: ~~~ #!jsp