Upload de Arquivos usando Servlet

Olá galera,

Não estou conseguindo buscar tópicos antigos usando a pesquisa do fórum :shock:

Vou ter que recorrer então a ajuda de vocês.Achei varios exemplos na internet de servlet para fazer upload, mas a maioria é upload de imagem, é o mesmo processo para fazer upload de uma imagem e de um arquivo de texto?

Alguem ai tem um exemplo de servlet, preciso fazer o upload pro servidor, e salvar(no banco de dados) o endereço que o arquivo está no servidor, para depois disponibilizá-lo para dowload.

Atenciosamente,
Rafael

Cara, já tive que fazer isso, mas não estou encontrando o projeto.

Não usei esta api, mas parece que te serve.

Abraços e dê notícias do funcionamento (ou não). =)

Sim, tambem vi dessa API da Apache, mas mesmo assim não consegui fazer funcionar direito :confused:
Sei que estou abusando um pouquinho, mas se alguem tiver pronto é mais facil rsrs

A maioria que encontro na internet é upload de imagem, o upload é feito da mesma forma?Se for posso me basear nisso…

Uma classe que salvar o arquivo do navegado no servidor.

Se tiver duvida fala ai …


import java.io.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.*;
import org.apache.commons.fileupload.servlet.*;
import java.util.*;



public class RecebeFile{
	/**
	 * CLASSE QUE USA DA API JAKARTA FILE UPLOAD 
	 * 
	 */
	private static final long serialVersionUID = 1L;	
	private HttpServletResponse res;
	
	public RecebeFile(HttpServletRequest request){
		req = request;;		
	}

	public void GravaArquivo (String Salvar) throws IOException
	{
		/**<form enctype="multipart/form-data" method = "post" action = "upload">
		  *defina no form o tipo de enctype multipart
		  *
		***/	

		boolean podeRecuperar =  ServletFileUpload.isMultipartContent(req);		
		//se for um multipar
		if(podeRecuperar)
		{		
				
			DiskFileItemFactory fabrica = new DiskFileItemFactory();

			fabrica.setRepository(new File("."));			
			FileItemFactory fabItem = fabrica;			
			ServletFileUpload upload = new ServletFileUpload(fabItem);
			try {
				List parseRequest = upload.parseRequest(req);			
				for (Object a : parseRequest)
				{
					FileItem Fils = (FileItem) a;
					if (!Fils.isFormField())
					{							
						File file = new File(Salvar);
						FileOutputStream fos = new FileOutputStream(file);
						InputStream is = Fils.getInputStream();						
						
						byte[] buffer = new byte[2048];
						int nLidos;
						while ((nLidos = is.read(buffer)) >= 0) {
						fos.write(buffer, 0, nLidos);
						}
						fos.flush();
						fos.close();
						is.close();
										
					}
				}
			} catch (FileUploadException e) {			
				System.out.println(e.getLocalizedMessage());				
			} catch (Exception e) {				
				System.out.println(e.getLocalizedMessage());			
			}
			 
		}
	}
	
}

Então Rafael, como eu disse, não encontrei ainda o projeto no qual eu uso essa bagaça. Estou tentando te ajudar garimpando na Internet para ver se encontro os mesmos caminhos que me fizeram acertar, cerca de 1 ano e meio atrás. Afinal, já coloquei essa joça para funcionar uma vez e pode ser que o caminho que eu faça seja menor.

Agora tenta isso aqui e talvez isso aqui também ajude.

Abraços.

Pessoal, me tira uma dúvida desse Servlet.

Aonde está sendo passado o caminho da pasta que será salvo o arquivo que foi selecionado?

[quote=esqure]Uma classe que salvar o arquivo do navegado no servidor.

Se tiver duvida fala ai …

[code]

import java.io.;
import javax.servlet.http.
;
import org.apache.commons.fileupload.;
import org.apache.commons.fileupload.disk.
;
import org.apache.commons.fileupload.servlet.;
import java.util.
;

public class RecebeFile{
/**
* CLASSE QUE USA DA API JAKARTA FILE UPLOAD
*
*/
private static final long serialVersionUID = 1L;
private HttpServletResponse res;

public RecebeFile(HttpServletRequest request){
	req = request;;		
}

public void GravaArquivo (String Salvar) throws IOException
{
	/**<form enctype="multipart/form-data" method = "post" action = "upload">
	  *defina no form o tipo de enctype multipart
	  *
	***/	

	boolean podeRecuperar =  ServletFileUpload.isMultipartContent(req);		
	//se for um multipar
	if(podeRecuperar)
	{		
			
		DiskFileItemFactory fabrica = new DiskFileItemFactory();

		fabrica.setRepository(new File("."));			
		FileItemFactory fabItem = fabrica;			
		ServletFileUpload upload = new ServletFileUpload(fabItem);
		try {
			List parseRequest = upload.parseRequest(req);			
			for (Object a : parseRequest)
			{
				FileItem Fils = (FileItem) a;
				if (!Fils.isFormField())
				{							
					File file = new File(Salvar);
					FileOutputStream fos = new FileOutputStream(file);
					InputStream is = Fils.getInputStream();						
					
					byte[] buffer = new byte[2048];
					int nLidos;
					while ((nLidos = is.read(buffer)) >= 0) {
					fos.write(buffer, 0, nLidos);
					}
					fos.flush();
					fos.close();
					is.close();
									
				}
			}
		} catch (FileUploadException e) {			
			System.out.println(e.getLocalizedMessage());				
		} catch (Exception e) {				
			System.out.println(e.getLocalizedMessage());			
		}
		 
	}
}

}
[/code][/quote]

Amigo, ele está deixando na “memória” Stream, o arquivo…

Essa minha servlet, ela pega o arquivo e joga para uma classe (Upload) onde verifico o nome do arquivo, no meu caso EXCEL, depois vai para outra classe onde faço umas verificações para poder carregar na DAO (para enviar para o BD).

Ele tambem faz uma verificação do nome do arquivo (caminho) pois no IE tem um jeito e no Crhome tem outro… um pega o caminho completo do arquivo, outro pega só o nome, e já tem esse tratamento que vc iria se deparar…

package servlet.br.com.simcard;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
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 javax.servlet.http.HttpSession;

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;

import br.com.simcard.UploadTelecom;

/**
 * 
 * &#9804;&real;&alpha;&#8355;&alpha;&euro;&pound;&#10017;&#9793;
 * 
**/

@WebServlet("/ServletUploadTelecom")
public class ServletUploadTelecom extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public ServletUploadTelecom() {
		super();
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws IOException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();

		boolean isMultipartContent = ServletFileUpload
				.isMultipartContent(request);
		if (!isMultipartContent) {
			out.println("<html>");
			out.println("<head>");
			out.println("</head>");
			out.println("<body>");
			out.println("<center>");
			out.println("<br>");
			out.println("Erro no Nome do Arquivo<br/>");
			out.println("</center>");
			out.println("</body>");
			out.println("</html>");

			return;
		}

		FileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload upload = new ServletFileUpload(factory);

		File dir = new File("arquivoUpload");
		if (dir.mkdir()) {
			System.out.println("Diretório criado com sucesso!");
		} else {
			System.out.println("Erro ao criar ou diretório já criado!");
		}

		try {
			List<FileItem> fields = upload.parseRequest(request);
			Iterator<FileItem> it = fields.iterator();

			while (it.hasNext()) {
				out.println("<tr>");

				FileItem fileItem = it.next();
				if (fileItem.getName() != null) {

					try {

						HttpSession session = request.getSession();
						String login = (String) session
								.getAttribute("loginUsuario");
						String caminho = null;

						if (fileItem.getName().contains("\\")) {
							String caminho2 = fileItem.getName().substring(
									fileItem.getName().lastIndexOf("\\") + 1);
							File uploadedFile = new File("./arquivoUpload/"
									+ caminho2);
							fileItem.write(uploadedFile);
							caminho = "./arquivoUpload/" + caminho2;

						} else {
							// SE FOR IE PASSAR O CAMINHO QUE VIRA SÓ O NOME DO
							// AQRQUIVO
							File uploadedFile = new File("./arquivoUpload/"
									+ fileItem.getName());
							fileItem.write(uploadedFile);
							caminho = "./arquivoUpload/" + fileItem.getName();
						}

						if (new UploadTelecom().anexos(login, caminho, response)) {

							out.println("<html>");
							out.println("<head>");
							out.println("</head>");
							out.println("<body>");
							out.println("<center>");
							out.println("<br>");
							out.println("Arquivo enviado com Sucesso!");
							out.println("</center>");
							out.println("</body>");
							out.println("</html>");

						} else {
							out.println("<html>");
							out.println("<head>");
							out.println("</head>");
							out.println("<body>");
							out.println("<center>");
							out.println("<br>");
							out.println("Erro ao enviar arquivo!<br><br> Nome e/ou Tipo Inválido(s)");
							out.println("</center>");
							out.println("</body>");
							out.println("</html>");

						}

						out.println("<html>");
						out.println("<head>");
						out.println("</head>");
						out.println("<body>");
						out.println("<center>");
						out.println("<br/>" + "<br/>" + "<br/>"
								+ "<input type=\"button\" onclick=\"javascript: location.href='uploadArquivoTelecom.jsp';\" value=\"Voltar\" />");
						out.println("</center>");
						out.println("</body>");
						out.println("</html>");

						out.close();

					} catch (Exception e) {
						e.printStackTrace();

					}

				}

			}
			out.println("</table>");
		} catch (FileUploadException e) {
			e.printStackTrace();
			out.println("<html>");
			out.println("<head>");
			out.println("</head>");
			out.println("<body>");
			out.println("<center>");
			out.println("<br>");
			out.println("Erro Interno");
			out.println("</center>");
			out.println("</body>");
			out.println("</html>");

		}
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("<center>");
		out.println("<br>");
		out.println("Erro Interno");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");

		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("<center>");
		out.println("<br/>" + "<br/>" + "<br/>"
				+ "<input type=\"button\" onclick=\"javascript: location.href='uploadArquivoTelecom.jsp';\" value=\"Voltar\" />  ");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");

		out.close();
	}

}