Upload de foto usando servlet

3 respostas
N

Boa noite pessoal, estou tentando fazer uma aplicação em q o usuário fará um upload de uma foto. Pesquisei algumas coisas na internet, linkei o .jar do FileUpload mas não consigo enviar a foto. A foto está chegando como null, mesmo colocando enctype=“multipat/form-data” no formulário. Segue abaixo o código da página e do servlet, se alguém puder me ajudar, desde já eu agradeço :wink:

Upload de Foto Insira sua foto

import java.io.IOException;

import java.util.Iterator;

import java.util.List;
import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileItemFactory;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**

  • Servlet implementation class Foto
    
    <em>/
    
    @WebServlet("/Foto")
    
    public class Foto extends HttpServlet
    
    {
    
    /</em>*
    

    */
    private static final long serialVersionUID = 1L;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    
    throws ServletException, IOException
    
    {
    
    System.out.println( "Foto: " + request.getAttribute(foto ) + “\n\n );
    
    FileItemFactory factory = new DiskFileItemFactory();
    
    ServletFileUpload upload = new ServletFileUpload(factory);
    
    List items = null;
    
    try
    
    {
    
    items = upload.parseRequest(request);
    
    }
    
    catch (FileUploadException ex) {
    
    }
    
    Iterator iter = items.iterator();
    
    while (iter.hasNext()) {
    
    FileItem item = (FileItem) iter.next();
    
    if (item.isFormField()) {
    
    }
    
    else
    
    {
    
    byte[] arquivo = item.get();
    
    }
    
    }
    
    }
    
    @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         processRequest(request, response);
     }
    
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         processRequest(request, response);
     }
    
     @Override
     public String getServletInfo() {
         return "Short description";
     }
    

}

aparece o seguinte erro:

Foto: null

16/06/2012 21:19:35 org.apache.catalina.core.StandardWrapperValve invoke

GRAVE: Servlet.service() for servlet [Foto] in context with path [/UploadFoto] threw exception

java.lang.NullPointerException

at Foto.processRequest(Foto.java:42)

at Foto.doPost(Foto.java:63)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)

at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

3 Respostas

Roger75

Use a tag “code”. Sobre o problema em questão, pesquisando no próprio fórum há algo:

A

RoseIndia tem um exemplo de como enviar uma imagem utilizando servlet:
http://www.roseindia.net/servlets/upload-image.shtml

N

Oi Roger, obrigada pela dica.

consegui resolver meu problema em partes.

Consigo recuperar a foto do meu formulário e salvar em um diretório do meu computador. Mas na verdade o que eu preciso é salvar a foto que o usuário faz o upload e depois responder com uma página html ou jsp mostrando a foto que ele enviou, mas quando tento recuperar para mostrar a foto não consigo, aparece o que eu escrevi na página mas a foto não (a foto foi salva na mesma pasta da página html). Procurei aki no fórum alguma coisa sobre upload de foto, tipo o que o orkut e o facebook fazem, mas não consegui resolver. O meu código parcialmente resolvido tá aí, se alguém puder me ajudar só me dando uma dica de como devo procurar a solução eu agradeço :slight_smile:

package br.com.daisy.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;

/**
 * Servlet implementation class Foto
 */
public class Foto extends HttpServlet
{
	private static final long serialVersionUID = 1L;
	
	@Override
	protected void doGet( HttpServletRequest request, HttpServletResponse response )
			throws ServletException, IOException
	{
	}
	
	@Override
	protected void doPost( HttpServletRequest request, HttpServletResponse response )
			throws ServletException, IOException
	{
		String      strFileName = null;
		boolean     bOk         = true;
		PrintWriter out         = response.getWriter( );
		
		String strOptionalFileName = "";
		String strOptionalFile 	   = "";
		
		try
		{
			if( ServletFileUpload.isMultipartContent( request ) )
			{
				ServletFileUpload servletFileUpload = new ServletFileUpload( new DiskFileItemFactory( ) );
				
				List listFileItemsList = servletFileUpload.parseRequest( request );
				
				FileItem fileItem = null;
				Iterator it 	  = listFileItemsList.iterator( );
				
				while( it.hasNext( ) )
				{
					FileItem fileItemTemp = ( FileItem )it.next( );
					
					if( !fileItemTemp.isFormField( ) )
					{       
						fileItemTemp.getFieldName( ).equals( "file1" );   
						strOptionalFile     = fileItemTemp.getString( );  
						strOptionalFileName = fileItemTemp.getName( );  
						fileItem            = fileItemTemp;
						
						if( fileItem != null )
						{
							strFileName = fileItem.getName( );
							if( fileItem.getSize( ) > 0 )
							{
								if( strOptionalFile.trim().equals( "" ) )
									strFileName = FilenameUtils.getName( strFileName );
								else
									strFileName = strOptionalFileName;
								
								String dirName = "C:\\Users\\Nina\\workspace\\Daisy\\WebContent\\fotos\\pontocruz.png";
								
								File saveTo = new File( dirName );
								
								try
								{
									fileItem.write( saveTo );
								}
								catch( Exception e )
								{
									bOk = false;
								}
								
								if( bOk )
								{
									RequestDispatcher rd = request.getRequestDispatcher( "/fotos/Resposta.html" );
									rd.forward( request, response );
									//out.println( "/fotos/corDominante.htm" );
								}
							}
						}
					}
				}
			}
		}
		catch( FileUploadException e )
		{
			e.printStackTrace();
		}
	}
	
	@Override
	public String getServletInfo( )
	{
		return "Short description";
	}
}

e o html:

<html>
  <head>  
	<style type = "text/css">
		.celula{
			border:           thin dotted #808080;
			padding:          5px;
			height:           20px;
			width:            20px;
		}
	</style>	

	</head>

  <body>
    <div id = "todoconteudo">
		<div>
			<img src = "pontocruz.png"/>
		</div>
		<br>
		<br>
    </div>
  </body>
</html>
Criado 16 de junho de 2012
Ultima resposta 5 de ago. de 2012
Respostas 3
Participantes 3