Gravar imagem no MySQL via JSP

3 respostas
M

Olá.

Eu estou fazendo uma página para cadastrar produtos com suas respectivas fotos, no entanto, não estou conseguindo gravar uma imagem num bd MySQL(é pra um trabalho da faculdade, o professor não quer que grave a imagem em disco). Estou usando a lib org.apache.commons.fileupload .
O código do FORM onde estão os campos do cadastro:

<FORM method="post" action="Controlador" onSubmit="return validar(this);" enctype="multipart/mixed">
  <TABLE border=0>
    <TR>
      <TD>Foto:</TD>
      <TD><INPUT type="file" name="foto"/></TD>
    </TR>
    <TR>
      <TD colspan="2" align=middle>
        <INPUT type="Submit" value="Salvar" />
        <INPUT type="reset" value="Limpar" />
      </TD>
    </TR>
  </TABLE>
  <INPUT type="hidden" name="opcao" value="incluirProduto">
</FORM>

Controlador é um servlet que tem este código quando a opção é incluirProduto:

try {
  FileItemFactory factory = new DiskFileItemFactory();
  ServletFileUpload upload = new ServletFileUpload(factory); 
  List items = upload.parseRequest(request); //<----
  Iterator iter = items.iterator();
						
  if(iter.hasNext()) {
    FileItem item = (FileItem) iter.next();
    byte[] imagem = item.get();
    Produto produto = new Produto();
    produto.setImagem(idPro, imagem);
  }
}
catch(Exception e) {
  System.out.println("Erro ao salvar imagem: " + e.getMessage());
}

Ali onde tem uma flecha apontando - “List items…” dá o seguinte erro:
the request doesn’t contain a multipart/form-data or multipart/mixed stream, content type header is null

Só que eu estou passando o enctype no FORM como multipart/mixed, acho que não deveria dar este erro.

Se alguém souber qual o problema, por favor, me avisem, preciso entregar este trabalho na Quinta-Feira.

E se tiverem outra sugestão de como gravar uma imagem num banco de dados MySQL sem gravar em disco, podem postar que vou ver…

Obrigado

3 Respostas

D

Aqui no portaljava na seçao tutoriais > Diversos… tem um material sobre isso

:wink:

T

Aí meu caro,

é um esqueminha meio de pedreiro mas eu usei e funcionou, no enctype vc coloca “multipart/form-data” e os parâmetros normais … vc monta uma string em javascript e passa no submit do formulário:

function submit(){

var url = cad.jsp?p1=+window.document.parametro.vs_para.value;

window.document.parametro.action = url;

window.document.parametro.submit();

}

Dessa maneira vc consegue pegar os parâmetros normais e o parâmetro da imagem:

boolean isMultipart = FileUpload.isMultipartContent(request);

DiskFileUpload upload = new DiskFileUpload();

// Define o tamanho máximo do anexo 100Kb

upload.setSizeMax(1024*100);

List items = upload.parseRequest(request);

Iterator itr = items.iterator();

String nome = “”;

String extensao;

while(itr.hasNext()){

FileItem item = (FileItem) itr.next();
if(!item.isFormField()){

if(item.getName().length()>0){

File fullFile  = new File(item.getName());

nome     = fullFile.getName();
...
}

}
}

Espero que tenha te ajudado

M

Taquete, valeu pela dica, mas não consegui fazer funcionar…Se eu coloco como multipart/form-data ele não grava nem o resto dos dados, simplesmente ignora a chamada…
Vendo o request.getContentType() ele me retorna: “multipart/form-data; boundary”…e uns números…e daí nem entra onde deveria…

denis, eu dei uma lida no tutorial, só que eu fiz exatamente com está descrito ali, exceto pelo fato de ele ter feito com que gravasse no BD numa página JSP, eu fiz em um Servlet, mas não funcionou também…

Se tiverem outras idéias…“Fazemos qualquer negócio”(com JAVA…hehehe)…

Abraços

Criado 3 de dezembro de 2006
Ultima resposta 4 de dez. de 2006
Respostas 3
Participantes 3