Download de multiplos arquivos no Vraptor

3 respostas
indivito

oi pessoal

estou tentando implementar upload de vários arquivos no vraptor porém esta dando uma exceçao…

Meu código java é este:

@Post @Path("/photo/upload")
	public void upload(UploadedFile upload) throws IOException {
		System.out.println( "PhotoController.upload()" );
	}

e meu código jsp é este:

<script type="text/javascript">
//<!--

$(function(){
	var btnUpload=$('#upload');
	var status=$('#status');
	new AjaxUpload(btnUpload, {
		action: '/vibro/photo/upload',
		//Name of the file input box
		name: 'uploadfile',
		onSubmit: function(file, ext){
			if (! (ext && /^(jpg|png|jpeg|gif)$/.test(ext))){
                  // check for valid file extension
				status.text('Only JPG, PNG or GIF files are allowed');
				return false;
			}
			status.text('Uploading...');
		},
		onComplete: function(file, response){
			//On completion clear the status
			status.text('');
			//Add uploaded file to list
			if(response==="success"){
				$('<li></li>').appendTo('#files').html('<img src="./uploads/'+file+'" alt="" /><br />'+file).addClass('success');
			} else{
				$('<li></li>').appendTo('#files').text(file).addClass('error');
			}
		}
	});
});

//-->
</script>


<!-- Upload Button-->  
<div id="upload" >Upload File</div><span id="status" ></span>  
<!--List Files-->  
<ul id="files" ></ul>

mas quando ele chama o método tenho esta exceçao:

Caused by: java.lang.IllegalArgumentException: Vraptor does not support this interface or abstract type: br.com.caelum.vraptor.interceptor.multipart.UploadedFile

at br.com.caelum.vraptor.http.ognl.GenericNullHandler.instantiate(GenericNullHandler.java:69)

at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createOgnlContextFor(OgnlParametersProvider.java:184)

alguém tem alguma dica?

obrigado

3 Respostas

Lucas_Cavalcanti

pro upload funcionar vc precisa ter um input type=file no html dentro de um form com multipart/form-data

e o nome do atributo que vc tá passando na requisição tem que ser o mesmo do nome do UploadedFile.

outra coisa: vc precisa ter o commons-fileupload no classpath.

claudsan

Estou com passando por algo também com o upload no IE8, quando ele faz o upload e vou pegar o retorno do envio ele gera um popup para donwload do arquivo já passaram por isto?

@Post("/uploads.do")
	public void sendFiles(final UploadedFile uploadedFile) {
		
		try {
			if (uploadedFile != null) {
				fileName = fileManager.save(uploadedFile);
				logger.info(fileName+" enviado ao servidor.");
				result.use(Results.http()).addHeader("Content-Type","text");
				result.use(Results.http()).addHeader("Vary","Accept");  
				result.use(GsonJSONSerialization.class).from(fileName).serialize();
			}
		} catch (Exception e) {
			String msg = "Erro ao fazer upload do arquivo." + e.getMessage();
			logger.error(msg, e);
			result.use(Results.status()).badRequest(Arrays.asList(new ValidationMessage(e.getMessage(),"error")));
		}
	}
claudsan

Consegui resolvi assim:

result.use(Results.http()).body(fileName);

Não estava sendo necessário o retorno como json, como estava se tratando apenas de uma string simples (nome do arquivo), e o foda que a gente fica um tempão nessas bobeiras ou fata de atenção mesmo :roll: .

Valeu.

Criado 3 de agosto de 2012
Ultima resposta 10 de ago. de 2012
Respostas 3
Participantes 3