Servlet e JSp - Upload de Arquivos

16 respostas
E

Pessoal tenho que gravar arquivos em um campo no banco de dados, o mesmo é enviado via JSp e tenho q gravalo, alguma sugestão? Não adianta pra ler apis, tou presisando pra ontem queria um exemplo proto.

Quem Puder obrigado!!!

16 Respostas

J

Você poderia fazer o Upload desse arquivo e salvá-lo em um diretório e no banco de dados você só grava o caminho/nome desse arquivo

E

Beleza, mas como eu faço mesmo isso?

R

Voce ja consegue fazer upload dos arquivos? caso negativo, de uma olhda no http://jakarta.apache.org.commons/fileupload. Eh bem simples de usar, e no site do projeto contem exemplos de codigo.

Rafael

L

Rafael, vocês dizem que esse comons fileupload é simples de usar. Pois não é isso que eu tô vendo aqui, estou há mais de duas semanas tentando apenas pegar o nome do arquivo enviado pelo form, só me retorna exceção cara.
Já fiz de tudo nesse mundo, coloquei os jar’s do filepload na pasta /WEB-INF/lib (mesmo lugar onde tá a minha classe de conexão com o oracle que funciona) criei uma biblioteca com eles e adicionei no meu projeto pra que o netbeans encontre as classes. Ele builda na boa, mas em execução na hora que eu chego na declaração do List, me retorna exceção.

Qual a mágica que tem que fazer pra isso funcionar e parar de dar exceção, pra funcionar no tomcat, pois até onde eu conheço de lógica no netbeans já tá tudo certo, o problema é o tomcat que me parece que não tá encontrando as classes que estão na pasta li dentro da WEB-INF.

[]'s.

M

Eu também não estou vendo nada de simples nesse fileupload! Estou perdido nele e não encontro nada que possa seguir de orientação para essa tarefa! :?

Alguém, por favor, pode nos ajudar de verdade?

F

Tente então o Upload Bean
Documentação

L

Pois é mrapha, é muito complicado mesmo esse fileupload, pô eu acho assim; se é pra usar bibliotecas de terceiros, é pra trabalhar menos e ter menos dor de cabeça e não toda essa apurrinhação que esse jakarta causa! Cara eu encontrei um tal de oreilly upload que é bom, objetivo e fui a única forma que eu consegui ver um upload funcionar em servlets, vale apena dar uma olhada,
[]'s.

D

Eu uso o commons fileupload numa boa…
O que tem de tão complicado?

L

O que tem de tão complicado é que ele só dá excessão. Só apurrinhação amigo!

D

Veja se ajuda:

// verifica se é multipart
if ( ServletFileUpload.isMultipartContent( request ) ) {

    // cria uma fábrica para items baseados em disco
    DiskFileItemFactory factory = new DiskFileItemFactory( 5242880, 
            new File( getServletContext().getRealPath( "/" ) + "/temp" ) );

    // cria um novo manipulador de arquivos enviados
    ServletFileUpload upload = new ServletFileUpload( factory );

    // configura o tamanho total do request
    upload.setSizeMax( 5262880 );

    List items = null;
    Map< String, String > mapa = null;

    try {

        // analisa o request
        items = upload.parseRequest( request );

        // obtém o mapa com os dados
        mapa = Util.getFieldValues( items );

    } catch ( FileUploadException exc ) {

        throw new ServletException( exc.getMessage() );

    }


    //processa os itens do map que são os campos normais do formulário
    //......


    // obtém e salva o arquivo
    for ( FileItem item : items ) {

        // se for arquivo
        if ( !item.isFormField() ) {

            File arquivoEnviado = new File( 
                    getServletContext().getRealPath( "/" ) + "/arquivos/" + o.getLink() ); // o.getLink nesse caso retorna o nome do arquivo

            try {
                item.write( arquivoEnviado );
            } catch ( Exception exc ) {
                throw new ServletException( exc.getMessage() );
            }

        }

    }

}


public class Util {

    // cria um mapa com apenas os campos de formulário normais
    public static Map< String, String > getFieldValues( List lista ) {
        
        HashMap< String, String > mapa = new HashMap< String, String >();
        
        for ( int i = 0; i < lista.size(); i++ ) {
            
            FileItem item = ( FileItem ) lista.get( i );
            
            if ( item.isFormField() )
                
                mapa.put( item.getFieldName(), item.getString() );
            
        }
        
        return mapa;
        
    }

}

[]´s

L

Cara o problema, pelo menos o meu, não é script não e sim a biblioteca. Mas valeu a ajuda de qualquer forma, é construtiva e com certeza vai ajudar a alguém que esteja disposto a usar o fileupload,
Abraços.

M

Exemplo Prático de utilização da biblioteca Jakarta FileUpload
http://www.guj.com.br/posts/list/0/114496.java

W

package br.com.devmedia.jsfupload;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.apache.myfaces.custom.fileupload.UploadedFile;

/**
*

  • @author Wesllhey
    */
    @ManagedBean
    @SessionScoped
    public class FileUploadBean {

    private UploadedFile arquivo;
    private String imagem;

    public String processarArquivo() {

    int posicao = arquivo.getName().lastIndexOf("\\");
     System.out.println(arquivo.getName().substring(posicao + 1));
    
     imagem = arquivo.getName();
     try {
    
     	OutputStream output = new FileOutputStream("c:\\TEMP\\"
     			+ arquivo.getName().substring(posicao + 1));
     	output.write(arquivo.getBytes());
     	output.close();
    
     } catch (FileNotFoundException e) {
     	e.printStackTrace();
     } catch (IOException e) {
     	e.printStackTrace();
     }
    
     return null;
    

    }

    public String visualizar(){

    return "visualizar";
    

    }

    public String Imagem() {

    return null;
    

    }

    public UploadedFile getArquivo() {
    
    return arquivo;
    
    }
    
    public void setArquivo(UploadedFile arquivo) {
    
    this.arquivo = arquivo;
    
    }
    

}

W

<%@page contentType=“text/html” pageEncoding=“UTF-8”%>

<%@taglib prefix=“f” uri=“http://java.sun.com/jsf/core”%>
<%@taglib prefix=“h” uri=“http://java.sun.com/jsf/html”%>
<%@taglib prefix=“t” uri=“http://myfaces.apache.org/tomahawk”%>

<%

This file is an entry point for JavaServer Faces application.

%>

<f:view>
Welcome to My FileUpload With JavaServer Faces

JSF FileUpload (Tomahawk)

<h:commandButton value="Enviar"action="#{FileUploadBean.processarArquivo}" />
	
	<h:commandButton value="Visualizar" action="#{FileUploadBean.processarArquivo}"/>


</h:form>
W
FileUploadBean br.com.devmedia.jsfupload.FileUploadBean session
W
FileUploadBean br.com.devmedia.jsfupload.FileUploadBean session
Criado 21 de janeiro de 2005
Ultima resposta 4 de nov. de 2011
Respostas 16
Participantes 8