Problemas com enctype ao fazer upload

3 respostas
andre_a_s

Buenas senhores :D
Estou com um problema que está em tirando o sono...
Tenho uma pagina que vai fazer upload, meu form está assim:

<form action="<%=request.getContextPath() %>/ImagemServlet" method="post" enctype="multipart/form-data">
		<input type="hidden" name="acao" value="upload"/>

Porém, na minha Servlet, ao tentar um request.getParameter("acao"), ele me retorna null. Ai que vem o bizarro... se eu tirar o enctype="multipart/form-data" e tentar novamente o request.getParameter("acao"), ele vai me trazer o valor "upload"!!!! Mas se eu deixar o form sem o enctype a servlet não consegue pegar o upload e me joga uma excessão!

org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded

Ou seja, com o enctype="multipart/form-data" não consigo pegar os parametros do request, e se tirar ele eu consigo, alguem sabe oq pode ser? Ta me tirando o sono isso... :(

Essa é a minha Servlet:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		
		if(request.getParameter("acao").equalsIgnoreCase("upload")){
			
			try {
				Imagem imagem = new Imagem();

				FileItemFactory factory = new DiskFileItemFactory();
				ServletFileUpload upload = new ServletFileUpload(factory);
				//upload.setSizeMax(11111);
				List items = upload.parseRequest(request);
				Iterator iter = items.iterator();
				
				while (iter.hasNext()) {
				    FileItem item = (FileItem) iter.next();
		
					if (!item.isFormField()) {
					    String fieldName = item.getFieldName();
					    String contentType = item.getContentType();
					    boolean isInMemory = item.isInMemory();
					    long sizeInBytes = item.getSize();
					    
					    imagem.setNome(request.getParameter("nome"));
					    imagem.setDescricao(request.getParameter("descricao"));
					    imagem.setNomeArquivo(item.getName());
					    imagem.setDataCadastro(new Date());
					    
					    File uploadedFile = new File("c:\\" + imagem.getNomeArquivo());
					    item.write(uploadedFile);				    
					}
					    
				}
				
				
			} catch (FileUploadException e) {
				e.printStackTrace();
				
			} catch (Exception e) {
				e.printStackTrace();
			}
		
		}
	}

3 Respostas

andre_a_s

Pelo que li, quando se usa enctype=“multipart/form-data” não é possivel pegar os parametros com o request.getParameter.
Alguem imagina uma solução pra isso? :oops:

M

Estou com o mesmo problema! Será q alguém pode ajudar?

seufagner

falai andre

cara, com o header multipart/form-data os parametros e o arquivo veem todos misturados no stream…

como “hard solution” voce pode ler o stream, atraves do metodo getInputStream() da interface ServletRequest, e identificar do seu modo aí os parametros…

se for possivel utilizar alguma biblioteca, da uma olhada no commons upload, projeto da jakarta, ele trata de maneira muito pratica o lance com uploads… ate o struts vem com a classe MultipartRequest para tratar disso… voce escolhe ai…

abs!

Criado 24 de setembro de 2006
Ultima resposta 5 de dez. de 2006
Respostas 3
Participantes 3