Enviar uma imagem de forma assíncrona para uma Action

4 respostas
yoshikichi
Olá a todo, então estou tentando enviar um imagem de forma assíncrona para uma action. Porém estou ganhando NullPointerException, acho que é por causa da enctype="multipart/form-data" do form do jsp que tem q definir esse parametro. Agora se enviar por submit normal ou seja sem javascript assincrono, não irá dar nullpointer. Segue o código abaixo, que acho que assim fica mais claro: Form Bean
public class ParceiroLogoForm extends ActionForm {

	
	private static final long serialVersionUID = 1L;
	//campo para foto: gabriel
	private FormFile fotoLogo;
	public String nome="teste";
	public void reset(ActionMapping mapping, HttpServletRequest request) {
		super.reset(mapping, request);
		
		}

	public FormFile getFotoLogo() {
		return fotoLogo;
	}

	public void setFotoLogo(FormFile fotoLogo) {
		this.fotoLogo = fotoLogo;
	}
	
}
Action
//Vou omitir parte do código da action

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		
		ParceiroLogoForm parceiroForm = (ParceiroLogoForm) form;
		byte[] foto = parceiroForm.getFotoLogo().getFileData();
		System.out.println(foto.toString());
// [.... mais código abaixo .......]
	}
}

Agora pedaço do JSP, o form e a funcação java script

<html:form styleId="parceiroLogoForm" action="carregaLogoCliente.do" enctype="multipart/form-data">
			Logo Tipo<html:file property="fotoLogo" styleId="flFotoLogo" />
			<input type="button" onclick="loaderFoto();" />
			<html:submit />
</html:form>


//função


function loaderFoto(){
	
	YAHOO.util.Connect.setForm('parceiroLogoForm');
	
		var uploadHandler = {
					upload: function(retorno) {
					alert(retorno.responseText);
					$('#divImage').empty().append(retorno.responseText);
					$('#divImage').show();
					}
		};
			YAHOO.util.Connect.asyncRequest('POST', 'carregaLogoCliente.do', uploadHandler);
  			
		}

Só algumas obs, estou utilizando a API Yahoo, outra coisa omiti parte do código pq era preciso, desculpa é da empresa.

MAS será que tenho que definir enctype="multipart/form-data" em javascript de novo para poder enviar o arquivo.??
falow

4 Respostas

yoshikichi
Mudei para JQuery em vez de api do yahoo:
function loaderFoto(){
	
	alert("iniciando");
	$.ajax({
                     contentType: "multipart/form-data",
					 async: true, 
                     url : 'carregaLogoCliente.do',
                     type: 'post',
                     data: $('#parceiroLogoForm').serialize(),
                     datatype: 'json',
                     sucess: function(data) {
                                                        
                                                        $('#divImage').empty().append(data);
                                                        $('#divImage').show();
                                                     
                                                      }
                 });
	
}
Problema é que agora fica explicito o "contentType: "multipart/form-data",". Por que ou ter uma exception FileUploadException.
Failed to parse multipart request
org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

:(

T

yoshikichi,

estou com a mesma dúvida, conseguiu solucionar o problema?

abs

T

yoshikichi,

estou com a mesma dúvida, conseguiu solucionar o problema?

abs

yoshikichi

Thiago F:
yoshikichi,

estou com a mesma dúvida, conseguiu solucionar o problema?

abs

Então eu fiz de outra forma, mas acredito que por get da certo.
Usei um iframe, por causa de tempo.

Criado 21 de dezembro de 2010
Ultima resposta 15 de fev. de 2011
Respostas 4
Participantes 2