Olá Pessoal!
Tenho um arquivo jsp que contém um form com dados de texto e um input html de arquivo (foto do usuário). Com os dados preenchidos (inclusive foto) eu passo esse form para o servlet que faz o upload de imagem e salva os dados do usuário.
para notificar o servlet do que ele deve fazer eu coloquei dentro do form a seguinte tag:
Depois eu vejo o valor da variável casoUso e em seguida processo a foto…o problema é q eu tive uma exceção lançada pelo FileUpload que requisitava um enctype=“multipart/form-data” ou enctype=“multipart/mixed stream”, aí que veio outro e mais enigmático problema:
quando eu colo isso (multipart…) na tag form dentro do arquivo jsp o input hidden (que contém o comando para o servlet executar o caso de uso) parece que não é passada junto com o form ou seja quando eu tento:
String casoUso = request.getParameter("casoUso");
if (casoUso.endsWith("alterarDados")) {
(...)
}
dá um NullPointerException, pois a variável casoUso == null…
alguém já se deparou com isso???
eu pesquisei no fórum mas não achei solução que não viesse por frameworks, como Struts ou webwork e nesse caso eu não estou usando nenhum framework…
detalhes: já coloquei o contenType do servlet para multipart tb mas não funcionou…
É cara!!!
O melhor a fazer é usar um framework mesmo!
Pega o JSF ou o Struts mesmo!
Pelo menos com o codigo é aberto vc poderá ver e entender o que esta rolando!
Pode crê Anderson…
mas aí eu tenho um problema, pois o intuito desse trabalho era justamente não usar nenhum framework…
e agora?
jeito eu sei que existe…o problema é se alguém aqui ja resolveu né…
bem você tem que colocar enctype=‘multipart/form-data’ no teu jsp e se você estiver utilizando commons file upload da apache faça o seguinte:
DiskFileUpload fu = new DiskFileUpload();
List fileItems = fu.parseRequest(request);
Iterator i = fileItems.iterator();
while ( i.hasNext() )
{
FileItem fi = (FileItem)i.next();
if ( fi.isFormField() )
suaVariável = fi.getString();
else{
try
{
InputStream in = fi.getInputStream();
// Obtém nome do arquivo
String nomeArquivo = fi.getName(); // valor do atributo filename
int nom = nomeArquivo.lastIndexOf( "\\" );
// busca somente o nome do arquivo
nomeArquivo = nomeArquivo.substring( nom + 1 );
// salva o arquivo em
File file = new File( caminho + "\\" + nomeArquivo + "");
// obtém conteúdo do arquivo
FileOutputStream fos = new FileOutputStream(file);
int c;
while((c = in.read()) != -1) // lê linha a linha do arquivo
fos.write(c); // grava linha por linha
fos.close();
}
catch ( Exception e ){}
}
}
Testei não, mas se contiver erros é bom que você aprende a lidar com o upload. Caso você não consiga resolver post novamente.
Opa Marcos!
Cara…eu já havia tentado colocar o enctype=“multipart/form-data” juntamente com o código de upload de arquivo usando o FileUpload, mas não dedu certo… veja que o meu problema é que quando eu coloco o enctype=“multipart/form-data” ele não passa o input que vem logo abaixo que vai dar o comando de upload de arquivo para o servlet…
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Faz o controle de sessao
HttpSession sessaoHTTP = request.getSession(true);
Usuario usuario = (Usuario)sessaoHTTP.getAttribute("usuario");
if (usuario == null){
response.sendRedirect("utilitario/mensagem_erro.jsp?mensagem="+"Sua sessão expirou!"+"&destino="+"/nucleo/login.htm");
}
// Execucao normal do Servlet
else{
// Obtem o caso de uso
String casoUso = request.getParameter("casoUso");
// Evento Alterar Dados Gerais do Usuário
if (casoUso.equals("alterarDados")){
String nome, email, sexo, homePage;
//Obtem os parametros
nome = request.getParameter("nome");
email = request.getParameter("email");
sexo = request.getParameter("sexo");
homePage = request.getParameter("homePage");
//processando o arquivo de imagem:
try{
DiskFileUpload dskFileUpload = new DiskFileUpload();
dskFileUpload.setSizeMax(262144); //tamanho máximo de 256k
dskFileUpload.setRepositoryPath("/tmp/");
List fileItems = dskFileUpload.parseRequest(request);
Iterator iter = fileItems.iterator();
FileItem fileItem = (FileItem)iter.next();
String fileName = fileItem.getName();
System.out.println("Nome do Arquivo: "+fileName);
fileItem.write(new File("/tmp/tmpImages/"+fileName));
System.out.println("mandou pro repositório!");
}catch(Exception e){
e.printStackTrace();
System.out.println("PAAAU nop Upload de Arquivo!");
}
//(...) salva o usuario
}
Poisé galera, o que acontece é que os parâmetros lidos no servlet vem nulos quando eu coloco o enctype=“multipart/form-data”…
já vi algo parecido em http://www.jguru.com/faq/view.jsp?EID=1045507
onde o cara perguntava como ler parametros de um form com multipart/form-data (em inglês!)
lá tem a resposta… um sujeito disse para usar um tal de MultipartStream já que estou usando o FileUpload da Jakarta…mas tentei usar e não consegui…o construtor pede um inputStream e um vetyor de bytes…
imagino que haja outra solução…
O problema é o seguinte, usando a propriedade multipart/form-data do formulário você tem que ler os dados de forma diferenciada, porque os campos do formulário não são tratados mais como parâmetros. Você vai obter o valor dos dados como eu mandei no primeiro post.
awee galera…
estou precisando de ajuda…
estou desenvolvendo uma aplicação com upload…e estou com problemas…como vi q vc jah conseguiu desenvolver talvez possa me ajudar…utilizo struts, eclipse, jboss…
o erro q esta ocorrendo é o seguinte:
procurei aqui no forum sobre o erro, pareçe q é alguma coisa relacionada a classpath, arquivo .jar…
porem jah adicionei o arquivo .jar na pasta web-inf/lib, declarei ele no meu projeto dentro do eclipse e o erro persistiu…
´
alguem poderia me dar uma ajuda mais detalhada do q fazer??
awee galera…
estou precisando de ajuda…
estou desenvolvendo uma aplicação com upload…e estou com problemas…como vi q vc jah conseguiu desenvolver talvez possa me ajudar…utilizo struts, eclipse, jboss…
o erro q esta ocorrendo é o seguinte:
procurei aqui no forum sobre o erro, pareçe q é alguma coisa relacionada a classpath, arquivo .jar…
porem jah adicionei o arquivo .jar na pasta web-inf/lib, declarei ele no meu projeto dentro do eclipse e o erro persistiu…
´
alguem poderia me dar uma ajuda mais detalhada do q fazer??