Mesmo jsp para Upload de imagem e cadastro

4 respostas
D

è 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

4 Respostas

G

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

D

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!!!
D
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

E se eu faço o upload assim:

&lt;%@page import="schema.Conexao"%&gt;
&lt;%@page import="java.sql.*"%&gt;
&lt;%@page import="java.io.*"%&gt;
&lt;%@page import="java.util.*"%&gt;
&lt;%@page import="org.apache.commons.fileupload.*"%&gt;
&lt;%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%&gt;
&lt;%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%&gt;

&lt;%
String id = request.getParameter(&quot;ok&quot;);
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();
                    } 
                         
                 }
%&gt;

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

D

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

Imagem:
http://i60.servimg.com/u/f60/11/80/81/44/estilo10.gif

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
<%@ 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("<html><head></head><body>");

if (ServletFileUpload.isMultipartContent(request))
{
 	out.println("<h2>Seu upload</h2>");
	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("</body></html>");
%>

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

Criado 27 de dezembro de 2007
Ultima resposta 9 de jan. de 2009
Respostas 4
Participantes 3