Upload de imagem com PrimeFaces em servidor TomCat, guardado somente o path da imagem na DB

0 respostas
S

Fala galera,

Já programo em outras linguagens mas só recentemente que comecei a me aventurar pelo mundo do java. Estou desenvolvendo um pequeno Dynamic Web Project no Eclipse usando PrimeFaces,JSP, Hibernate e TomCat. Basicamente se trata de vários formulários de cadastros e um deles é o cadastro de usuários. A parte do Domain, Bean, DAO e as paginas para listar, cadastrar, editar e excluir já estão prontas e funcionando, porém a tabela de usuário, na minha base de dados, tem um campo para foto(imagem), e é ai que está meu problema. Quero salvar somente o path da Foto(imagem) na base de dados, e na pagina do usuário quero poder adicione a foto, claro. Li muitas coisas no Google de como fazer usando o componente p:fileUpload, e confesso que consegui, em partes. O problema é que, eu quero que as imagens sejam salvas da maneira correta, por exemplo em uma pasta /imagens em meu projeto.
Não sei bem como seria.

Ao tentar usar o componente p:fileUpload consegui salvar em uma pasta no meu disco c: e não em uma suposta pasta do servidor. Qual seria a maneira correta para fazer isso acontecer? Existe alguma configuração no TomCat que tem que ser feita? Pretendo disponibilizar esses formulários na web, então gostaria de saber como é a maneira correta para fazer isso funcionar. Por favor, me ajudem =)

segue o codigo do metodo upload do meu bean
public void upload(FileUploadEvent event) {

    try {
        String realPath = FacesContext.getCurrentInstance()
                .getExternalContext().getRealPath("/");

        // Aqui cria o diretorio caso não exista
        File file = new File(realPath + "/imagens/");
        file.mkdirs();

        byte[] arquivo = event.getFile().getContents();
        String caminho = realPath + "/imagens/"
                + event.getFile().getFileName();

        // esse trecho grava o arquivo no diretório
        FileOutputStream fos = new FileOutputStream(caminho);
        fos.write(arquivo);
        fos.close();

        pathImage = caminho;
        System.out.println("caminho da imagem salva é  = " + caminho);

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}`
E o codigo do componente no meu xhtml
<p:fileUpload fileUploadListener="#{usuarioBean.upload}" fileLimit="1"
                    fileLimitMessage="Excedido Limite de arquivos"
                    cancelLabel="Cancelar" label="Arquivo" uploadLabel="Anexar"
                    invalidFileMessage="Somente arquivos .jpg, .png ou .gif"
                    allowTypes="/(\.|\/)(gif|jpe?g|png)$/" value="#{usuarioBean.imagem}"
                    mode="advanced" skinSimple="true" />
Criado 10 de junho de 2015
Respostas 0
Participantes 1