Mesmo jsp para Upload de imagem e cadastro

è meu primeiro upload e queria cadastrar um carro e inserir a foto no mesmo jsp, mas não consigo, no meu servlet , alguém tem uma dica de o que devo alterar se é no jsp ou no servlet que realiza a persistência?
é text com imagem

gostaria de inserir no mesmo jsp por exemplo isso eo upload da imagem

Valor 1 Valor 2 Valor 3

tenho um form jsp simple para cadastro de imagem assim

<input type=“submit” id=“upload” name=“upload” tabindex=“2” style="position:absolute; top:20px; left:532px; >

como junto os dois no mesmo jsp? estou utilizando o commons - apache

Na sua servlet vc pega os parametros recebidos pela JSP certo ???

Então eu imagino q vc faça uma condição como essa:

if (fileitem.isFormField()) {
    //Aqui vem seus inputs (na ordem em q o JSP manda, normalmente na ordem que estão na JSP)
}else{
    //Aqui vem o arquivo
}

Agora vc só precisa pegar seu input no if caso a condição seja verdadeira…Esta um pouco fraco o exemplo não sei se te ajudei …

[/]'s

há blz!! não posso testar aqui mas entendi a lógica já é uma mão na roda.
deve ser isso pq. dava null no parâmetro que eu pegava no servlet acho que justamente por não fazer esta condição. deve resolver.

    valeu amigão!!!

[quote=Giulliano]Na sua servlet vc pega os parametros recebidos pela JSP certo ???

Então eu imagino q vc faça uma condição como essa:

if (fileitem.isFormField()) {
    //Aqui vem seus inputs (na ordem em q o JSP manda, normalmente na ordem que estão na JSP)
}else{
    //Aqui vem o arquivo
}

Agora vc só precisa pegar seu input no if caso a condição seja verdadeira…Esta um pouco fraco o exemplo não sei se te ajudei …

[/]'s[/quote]

E se eu faço o upload assim:

[code] <%@page import=“schema.Conexao”%>
<%@page import=“java.sql."%>
<%@page import="java.io.
”%>
<%@page import=“java.util."%>
<%@page import="org.apache.commons.fileupload.
”%>
<%@page import=“org.apache.commons.fileupload.disk.DiskFileItemFactory”%>
<%@page import=“org.apache.commons.fileupload.servlet.ServletFileUpload”%>

<%
String id = request.getParameter("ok");
String contentType = request.getContentType();

if ((contentType != null) && (contentType.indexOf(&quot;multipart/form-data&quot;) &gt;= 0)) {

            DataInputStream in = new DataInputStream(request.getInputStream());
            int formDataLength = request.getContentLength();
            byte dataBytes[] = new byte[formDataLength];
            int byteRead = 0;
            int totalBytesRead = 0;

          while (totalBytesRead &lt; formDataLength) {

              byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
                 totalBytesRead += byteRead;
            }  
            String file = new String(dataBytes);
            String saveFile = file.substring(file.indexOf(&quot;filename=\&quot;&quot;) + 10);
          saveFile = saveFile.substring(0, saveFile.indexOf(&quot;\n&quot;));
          saveFile = saveFile.substring(saveFile.lastIndexOf(&quot;\\&quot;) + 1,saveFile.indexOf(&quot;\&quot;&quot;));
            int lastIndex = contentType.lastIndexOf(&quot;=&quot;);
            String boundary = contentType.substring(lastIndex + 1,contentType.length());
            int pos;

         pos = file.indexOf(&quot;filename=\&quot;&quot;);
         pos = file.indexOf(&quot;\n&quot;, pos) + 1;
         pos = file.indexOf(&quot;\n&quot;, pos) + 1;
         pos = file.indexOf(&quot;\n&quot;, pos) + 1;

           int boundaryLocation = file.indexOf(boundary, pos) - 4;
            int startPos = ((file.substring(0, pos)).getBytes()).length;
            int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;
            String filepath = session.getServletContext().getRealPath(&quot;/&quot;) + &quot;/eventos/&quot;+ saveFile;
            FileOutputStream fileOut = new FileOutputStream(filepath);

        fileOut.write(dataBytes, startPos, (endPos - startPos));
        fileOut.flush();
        fileOut.close();
        
        try {
                 Connection conn = Conexao.getConection();
                 int codigo = Integer.parseInt(id);
                 
                 PreparedStatement inserirImagem = 
                         conn.prepareStatement(&quot;INSERT INTO img (codT, img) VALUES (?, ?) &quot;);
                  inserirImagem.setInt(1, codigo);
                  inserirImagem.setObject(2, saveFile); // itemName);
                  
                  inserirImagem.execute();
               // ok, enviou
                  
               } catch(Exception ex) {
                   ex.printStackTrace();
                } 
                     
             }

%>[/code]

Como posso realizar o teste com if (fileitem.isFormField()) …

Acontece que quando fiz o upload, o parâmetro de texto ficou assim:

Imagem:

O código é este:

index.jsp

<form action="uploadfiles.jsp" method="post" enctype="multipart/form-data">
<input type="hidden" name="oculto" value="1">
<input type="file" name="arquivo">
 <input type="text" name="texto">
<input type="submit" value="Enviar">
</form>     

uploadfiles.jsp

[code]<%@ page import=“schema.Conexao”%>
<%@ page import=“java.sql.*”%>
<%@page contentType=“text/html;charset=ISO-8859-1”%>
<%@ page import=“org.apache.commons.fileupload.FileItem” %>
<%@ page import=“org.apache.commons.fileupload.servlet.ServletFileUpload” %>
<%@ page import=“org.apache.commons.fileupload.disk.DiskFileItemFactory” %>
<%@ page import=“java.util.List” %>
<%@ page import=“java.util.Iterator” %>
<%@ page import=“java.io.File” %>
<%
out.println("");

if (ServletFileUpload.isMultipartContent(request))
{
out.println(“

Seu upload

”);
ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
String uploadDir = application.getRealPath(request.getServletPath());
uploadDir = (new java.io.File(uploadDir)).getParent()+"\UploadedFiles\";
try {
  	List fileItemsList = servletFileUpload.parseRequest(request);
	Iterator it = fileItemsList.iterator();
	while (it.hasNext())
	{
		FileItem fileItem = (FileItem)it.next();
		if (fileItem.isFormField())
		{
		
			out.println(fileItem.getFieldName()+" - "+fileItem.getString()+"<br>");
		}
		else
		{
			fileItem.write(new File( uploadDir+"\\"+(new File(fileItem.getName()).getName())));
			out.println("<br><b>Arquivo</b><br><br><img src=UploadedFiles/"+fileItem.getName()+" /> <br><br>Arquivo enviado com sucesso!<br><br>");
			
			String id = fileItem.getString();
			
			int codigo = Integer.parseInt(id);
			
			Connection conn = Conexao.getConection();
			
			 PreparedStatement pstmt = conn.prepareStatement("INSERT INTO teste_upload (codigoTopic, url_image) VALUES ( ?, ? )");
			  pstmt.setInt(1, codigo);
			  pstmt.setObject(2, fileItem.getName());
			  pstmt.execute();
			
			 out.println("Adicionado ao banco de dados: "+id+" e "+fileItem.getName());
			
			  conn.close();
		 }
	}
}
catch (Exception ex) {
	out.println(ex.getMessage());
     out.println("<br>Não foi possível cadastrar os dados no banco de dados!<br>"+ex);
}

}
else
out.println(“Nenhum arquivo encontrado!.”);
out.println("");
%>
[/code]

Antes eu usava este exemplo aqui:
http://www.javafree.org/viewtopic.jbb?t=871583#163202
só que não pudia enviar imagens pelo Internet Explorer.
Com esse novo exemplo envia mas normalmente com todos os browsers, captura o parêmtro, como é mostrado na imagem, só que quando ele é setado no banco de dados, vai como caracteres desconhecidos…

O que posso fazer para upar um arquivo em qualquer navegador capturando outros parâmetros?

Agradeço a ajuda.

[]s