Upload com vraptor3 + uploadify [resolvido]

67 respostas
cordjr

Olá pessoal estou tendo problemas pra fazer upload con vraptor e uploadify. quando tento fazer o upload do arquivo ele me retorna um erro 404,ja testei o caminho do método direto no browser e esta ok.

segue mais informações:

o meu controller tem o seguinte metodo

public void anexarArquivosAtividadeComplementar( UploadedFile files){
		
		 // manipula o arquivo
		
		
	}

no jsp tenho o seguinte javascript:

$(document).ready(
				       function(){
				    	   $('#files').uploadify({
				    			'uploader'       : '${pageContext.request.contextPath}/js/uploadify.swf',
				    			'script'         : '${pageContext.request.contextPath}/solicitacao/anexarArquivosAtividadeComplementar',
				    			'cancelImg'      : '${pageContext.request.contextPath}/img/cancel.png',
				    			'folder'         : '/tmp',
				    			'multi'          : true,
				    			'buttonText'	 : 'Adicionar arquivo',
						    	'queueSizeLimit' : 5 ,
						    	'sizeLimit'      : 2048000,
						    	'fileExt'        : '*.jpg;*.pdf;', 
						    	'onError'        : function(event, queueID, fileObj, errorObj){
							    	              alert(errorObj.info);

							    	} 
							    	
					    		
				    		});
					    }


				      );

outra dúvida é como fazer upload com múltiplos arquivos.

Agradeço desde já

67 Respostas

Lucas_Cavalcanti

o nome do parâmetro que o uploadfy passa é files?

vc tem que receber no seu controller um parâmetro com o mesmo nome que o uploadfy passa, senão não funciona…

qto ao upload de vários arquivos, ou vc recebe mais de um parâmetro na sua lógica, ou recebe uma List, ou ainda faz cada upload separadamente via ajax…

cordjr

Olá Lucas, depois de muito quebrar a cabeça descobri o seguinte:
Tenho um interceptor quê verifíca um determinado parâmetro na sessão e caso não exista o parâmetro ele solta um erro 404, por alguma razão obscura quando o uplodify dispara o request, é como se o e request não fizesse parte da sessão atual do browser, então o meu interceptor não acha o parâmetro da sessão e soçta um erro 404.
Outra curiosidade é que isso só acontece no firefox, no ie funciona tranqüilo, vou ver o que faço aqui pra resolver.

Obrigado pela força.

Lucas_Cavalcanti

sua sessão está sendo feita por cookies?

pode ser que o uploadfy não está mandando os cookies…

cordjr

Obrigado pela dica lucas, consultando o oraculo descobri que problema todo é que o uploadify utiliza o flash pra fazer upload dos arquivos, dessa forma quando o request é disparado pelo flash ele é criada uma nova sessão no servidor.
Agora vai saber porque no ie esse compoortamento é diferente O_o.
Pra contornar vou passar um parametro, pra que ele identifique o request sem dar erro 404, qq coisa posto o resultado

[]'s

Lucas_Cavalcanti

o que vc quer dizer por usar o flash?

Adobe Flash?
Flash Scope?

G

Lucas Cavalcanti:
o que vc quer dizer por usar o flash?

Adobe Flash?
Flash Scope?

Hehehe. Essa eu rí muito alto. Pelo que entendi no site ele usa Adobe Flash.

Muito provavelmente é uma implementação bem porca e que não consegue usar o jsessionid enviado pelo navegador.

cordjr

Realmente era o Adobe Flash :slight_smile:

Agora tá funcionando que é uma beleza, obrigado a todos pela atenção

[]´s

renanpto

cordjr:
Realmente era o Adobe Flash :slight_smile:

Agora tá funcionando que é uma beleza, obrigado a todos pela atenção

[]´s


Bom Dia,

Voce conseguiu fazer o upload de multiplos arquivos ? E como conseguiu acessar os arquivos no controller ?

Ontem estava tentando criar o upload de com esse plugin e não consegui.

O Vraptor não conseguia setar o parametro pro metodo da controller, sempre chegava nulll.

Pelos logs de debug do VRaptor ele recebia os arquivos e fazia o upload para a pasta temporaria do SO,

Uploaded file: fotos with [uploadedFile uploadedCompleteName=nomeDoArquivo.......]

Como pode ver o nome do campo no jsp é “fotos”…

No controller fiz varios testes desde com um unico arquivo ou multiplos.

Unico arquivo

public void salvar(UploadedFile fotos)

Multiplos arquivos…

public void salvar(List<UploadedFile> fotos)

Esse com multiplos arquivos acredito que não funcione sem fazer o tratamento para setar a posicao na Collection o qual o arquivo ira usar (ex: fotos[0]).

E como voce fez para resolver esse problema da aplicacao em flash criar um nova sessao ? Voce tratou no interceptor, tipo adicionando um novo parametro como flag ?
Para isso tentei passar o jsessionid no campo scriptData, mas não rolo. Sempre tava criando uma nova sessao FDP (rs).

Isso ai.

Lucas_Cavalcanti

baixe o último snapshot do vraptor:
http://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.1.3-SNAPSHOT/vraptor-3.1.3-20100519.161626-7.jar

e chame o input de fotos[]

teoricamente vai funcionar

cordjr

Olá no meu caso eu precisava em vez de fazer upload de varios arquivos, usea uma funcionalidade do uploady que fazia upload dos arquivos a medida que eu ia selecionando, quando ao parametro, o uploadfy nomeia como “Filedata” então você vai ter que usar um método mais ou menos assim :

public void anexar(UploadedFile Filedata){
      ...
  }

espero ter ajudado :slight_smile:

[]´s

renanpto

Lucas Cavalcanti:
baixe o último snapshot do vraptor:
http://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.1.3-SNAPSHOT/vraptor-3.1.3-20100519.161626-7.jar

e chame o input de fotos[]

teoricamente vai funcionar


Até funcionou, agora está chegando somente um unico arquivo na colecao.

Teste essas variaveis no parametro do metodo UploadedFile[] fotos ou List fotos.

Pelo log do Vraptor ele recebeu os 3 arquivos que selecionei.

DEBUG MultipartInterceptor - Found [3] attributes in the multipart form submission. Parsing them.
DEBUG VRaptorRequest - Setting fotos[] with [1967 GT 500 Shelby Mustang 2.jpg]
DEBUG MultipartItemsProcessor - Uploaded file: fotos[] with [uploadedFile uploadedCompleteName=1967 GT 500 Shelby Mustang 2.jpg uploadedName=1967 GT 500 Shelby Mustang 2.jpg contentType=image/jpeg]
DEBUG VRaptorRequest - Setting fotos[] with [42230.jpg]
DEBUG MultipartItemsProcessor - Uploaded file: fotos[] with [uploadedFile uploadedCompleteName=42230.jpg uploadedName=42230.jpg contentType=image/jpeg]
DEBUG VRaptorRequest - Setting fotos[] with [45.JPG]
DEBUG MultipartItemsProcessor - Uploaded file: fotos[] with [uploadedFile uploadedCompleteName=45.JPG uploadedName=45.JPG contentType=image/jpeg]
renanpto

cordjr:
Olá no meu caso eu precisava em vez de fazer upload de varios arquivos, usea uma funcionalidade do uploady que fazia upload dos arquivos a medida que eu ia selecionando, quando ao parametro, o uploadfy nomeia como “Filedata” então você vai ter que usar um método mais ou menos assim :

public void anexar(UploadedFile Filedata){
      ...
  }

espero ter ajudado :slight_smile:

[]´s


Sim, eu alterei o nome do campo através do pelo atributo “fileDataName” do uploadify.
E a questão da aplicacao flash criar uma nova sessão pro upload, qual foi a solucão que encontrou ?

cordjr

No caso fis assim :
1 adicionei uma parâmetro no scriptData com id da sessão.

'scriptData'     :   'sessionId': '${pageContext.request.session.id}'

2 em seguida, no meu metodo do controller, adicionaei esse parametro para que quando o arquivo fosse upado seria gravado num diretorio onde o nome do arquivo seria o nome original + o id da sessao, dessa forma, quando precisava jogar os arquivos no destino final era só procurar os arquivos que contivessem o id da sessão no nome.

public void anexar(UploadedFile FileData, String sessionId){
         gravaArquivoTemporario(FileData, sessionId);
    }

[]'s
Não ficou muito elegante mais tá funcionando :).

renanpto

cordjr:
No caso fis assim :
1 adicionei uma parâmetro no scriptData com id da sessão.

'scriptData'     :   'sessionId': '${pageContext.request.session.id}'

2 em seguida, no meu metodo do controller, adicionaei esse parametro para que quando o arquivo fosse upado seria gravado num diretorio onde o nome do arquivo seria o nome original + o id da sessao, dessa forma, quando precisava jogar os arquivos no destino final era só procurar os arquivos que contivessem o id da sessão no nome.

public void anexar(UploadedFile FileData, String sessionId){
         gravaArquivoTemporario(FileData, sessionId);
    }

[]'s
Não ficou muito elegante mais tá funcionando :).

Se foi a unica maneira que encontrou fazer o que né :lol: .

Aqui o parametro setado no scriptData e o arquivo nao estao chegando no controller :? . (muito estranho)

Fiz dessa forma que sugeriu e nada, upar somente um arquivo por vez, iniciando o upload apos a selecao do arquivo e tal.

public void anexar(UploadedFile FileData, String sessionId){
         ......
    }

Os js que voce utilizou foram só os que a documentacao indica ?

&lt;script type="text/javascript" src="/path/to/jquery-1.3.2.min.js"&gt;&lt;/script&gt; 
&lt;script type="text/javascript" src="/path/to/swfobject.js" 
&gt;&lt;script type="text/javascript" src="/path/to/jquery.uploadify.v2.1.0.min.js"&gt;&lt;/script&gt;

Unica diferente nos scripts é que a versao do jquery que estou utilizando é a jquery-1.4.2.min.js.

No jsp, esse elemento “#files” que voce esta usando é um input do tipo file ?

Obrigado

renanpto

Lucas, os testes que fiz apos a atualizacao do jar do vraptor estou usando um outro plugin do jquery diferente do Uploadify, MultiFile http://fyneworks.com/jquery/multiple-file-upload/
Esse faz o submit via form, nao usando ajax. Como disse para fazer upload de varios arquivos o array/colecao chega apenas com um unico arquivo.
Caso nao use upload de multiplos arquivos tendo no metodo apenas o “UploadedFile foto” funciona sem problemas.

Ontem quando comecei com essa historia de fazer o uploads, iniciei utilizando o plugin “Uploadify”. E nao consegui fazer que os objetos chegassem no metodo da controller.
Como nosso amigo “cordjr” conseguiu fazer o plugin funcionar junto com o VRaptor, eu continuei tentando fazer funfar… “Eu sou brasileiro, não desisto nunca!” rs
Para desencargo de consciencia achando que eu estava usando errado o plugin, criei um projetinho a parte sem o VRaptor para realizar o teste. Criei um Servlet para atender as requisições, ficando assim:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		 System.out.println("UploadServlet invoked. Here are all uploaded files: ");
	        try {
	            List&lt;FileItem&gt; items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
	            for (FileItem item : items) {
	                if (!item.isFormField()) {
	                    System.out.println("Name: " + item.getName());
	                    System.out.println("Size: " + item.getSize());
	                    System.out.println("Type: " + item.getContentType());
	                }
	            }
	        } catch (Exception e) {
	            throw new ServletException(e);
	        }
	}

Originalmente retirado daqui http://stackoverflow.com/questions/2272160/uploadify-plugin-doesnt-call-java-servlet
Fiz o teste e o arquivos chegaram no servlet corretamente.
Usando este plugin parece que os arquivos sao upados pelo VRaptor, segundo o log:

DEBUG VRaptorRequest - Setting Filedata with [P1160327.JPG] DEBUG MultipartItemsProcessor - Uploaded file: Filedata with [uploadedFile uploadedCompleteName=P1160327.JPG uploadedName=P1160327.JPG contentType=application/octet-stream]
E no metodo da controler ta esperando o “UploadedFile Filedata”… e nao chega nada…

Obrigado.

cordjr

renanpto realmente está muito estranho isso… :shock: não sei se isso ajuda mais a versão do vraptor homolaga aqui é a 3.0.2
e está funcionando perfeitamente. os javascripts são aqueles que vc citou. Outra coisa vc já tentou injetar um httpServletRequest e verificarse os parametros estão realmente lá ?

Lucas_Cavalcanti

não tem um jeito de vc especificar o nome dos parâmetros no uploadfy?

renanpto

Sim, tem.
Como voce pode ver no log do VRaptor o nome do parametro para o metodo é “Filedata”.

DEBUG VRaptorRequest - Setting Filedata with [P1160327.JPG]  
DEBUG MultipartItemsProcessor - Uploaded file: Filedata with [uploadedFile uploadedCompleteName=P1160327.JPG uploadedName=P1160327.JPG contentType=application/octet-stream]

Metodo da minha controller :

public void metodo(UploadedFile Filedata) {
....
}
Lucas_Cavalcanti

então, renanpto, o problema aqui é que ele quer fazer o upload de vários arquivos ao mesmo tempo… e isso não tá rolando…

o que dá pra fazer tb é fazer os uploads um por um (do mesmo jeito que o orkut faz pra adicionar fotos, por exemplo)…

renanpto

Lucas Cavalcanti:
então, renanpto, o problema aqui é que ele quer fazer o upload de vários arquivos ao mesmo tempo… e isso não tá rolando…

o que dá pra fazer tb é fazer os uploads um por um (do mesmo jeito que o orkut faz pra adicionar fotos, por exemplo)…

Sim, vou fazer o upload um a um.

Obrigado pela ajuda.

renanpto

cordjr:
renanpto realmente está muito estranho isso… :shock: não sei se isso ajuda mais a versão do vraptor homolaga aqui é a 3.0.2
e está funcionando perfeitamente. os javascripts são aqueles que vc citou. Outra coisa vc já tentou injetar um httpServletRequest e verificarse os parametros estão realmente lá ?

Acabei saindo as 4 horas e voltando agora pouco… e fui dar a ultima olhada no fonte.

E adivinha, encontrei o problema que estava rolando que nem um unico arquivo usando esse plugin não chegava no metodo da controller.

O problema é o seguinte, tenho um componente que resolve urls não encontradas. No jsp a url que faz o upload estava terminada com “/” e no controller na anotacao @Path o mapeamento terminava sem a barra. A requisicao chegava nesse componente, que tem a logica q verifica se a url é terminada com “/”, se sim ele tenta invocar uma nova url sem a barra no final… assim invocava a url correta mas de alguma perdia os parametros vindos do flashzinho que deveriam ser passados pro metodo. Os parametros vindos pelo url, continuavam sendo setados normalmente.

Todo esse trabalho por uma “/” na url.

Isso ai, obrigado pela ajuda =D.

C

Já q o assunto é uploadify, peço ajuda a quem ja conseguiu enviar as fotos para a pasta de uploads…
Eu havia conseguido enviar os endereços para o banco, junto com a data do upload, redimensionar os tamanhos e enviar para a pasta uploads quando trabalhava localmente…
Agora tive q pôr no servidor para teste e não funciona mais a parte d ir para a pasta uploads…

Alguém já passou por isso? Sabem como ajudar?

Agradeço!

Lucas_Cavalcanti

vc precisa conseguir um File que aponta pra essa sua pasta de uploads…

o problema eh que no servidor vc só conhece pastas dentro da sua aplicação (até dá pra pegar pastas absolutas do sistema, mas é meio ruim fazer isso)…

vc vai precisar fazer algo do tipo:

String path = servletContext.getRealPath("/pasta/dentro/da/sua/aplicação");
File pastaUpload = new File(path);

e daí é só salvar os uploads dentro dessa pasta…

renanpto

Lucas Cavalcanti:
vc precisa conseguir um File que aponta pra essa sua pasta de uploads…

o problema eh que no servidor vc só conhece pastas dentro da sua aplicação (até dá pra pegar pastas absolutas do sistema, mas é meio ruim fazer isso)…

vc vai precisar fazer algo do tipo:

String path = servletContext.getRealPath("/pasta/dentro/da/sua/aplicação");
File pastaUpload = new File(path);

e daí é só salvar os uploads dentro dessa pasta…


No nosso projeto nós deixamos o caminho para a pasta de uploads configurado num arquivo .properties.

Por exemplo quando for fazer upload, a aplicacao utiliza esse caminho + caminho onde salvará o arquivo.

Unica vantagem dessa forma é se voce precisar salvar os arquivos fora do contexto da aplicacao. FIca a dica =D.

C

Pessoal, consegui enviar para a pasta d uploads e para o bd tb, só q para o bd foi com 1 endereço e para a pasta com o completo, como vcs sugeriram…
O poblema agora é q não consegui enviar junto o cd_album…
Esse código vem por get para a página fotos.php e aí coloquei ele num formulário para enviar junto com as fotos q estão sendo incluídas… coloquei num campo hidden assim:

Aqui recebe por GET no arquivo fotos.php:
$cd_album=$_GET[‘codigo’];

Aqui está o formulário q vai enviar essa variável:
<input type=“hidden” id=“codigo” name=“codigo” value="

E lá na parte do script eu coloquei
?scriptData? : {?codigo?:$(?#codigo?).val() }

E para receber no arquivo uploadify.php eu coloquei:
$cd_album = $_POST[‘codigo’]

Mas não foi para lá… Vcs sabem o q pode ser?
E outra coisinha: não está mais funcionando no Mozilla :shock:… o botão perde a propriedade e fica como um input file normal q envia as fotos d a uma. No I.E funciona.

Agradeço a atenção d vcs.

G

Ué, mas isso aqui não é um fórum de Java? :roll:

C

Desculpem se postei no lugar errado… Mas eu postei aqui porque vi q estavam falando do jquery uploadify e estou tendo dificuldades em implementar ele com php e javascript :?.

Não consigo enviar uma variável diferente para o arquivo do uploadify.php q é o q está manipulando as fotos q eu envio :cry:
Não consigo fazer funcionar no Mozilla :cry:

Tá complicado…
Acho q vou procurar algum plugin q seja mais fácil d usar para upload de múltiplos arquivos…

Se alguém já passou por isso e puder ajudar, eu agradeço.
Obs.: estou trabalhando com php estruturado.

Lucas_Cavalcanti

as aspas estão corretas?

tenta usar o plugin Firebug no firefox e ver se tá dando algum erro de javascript…

G

Ou então para teste passar um valor fixo:

"scriptData" : {"codigo": 10 }

C

Lucas, no lugar dos ? são as aspas simples q eu coloquei.

garcia-jj, vou tentar fazer da maneira q vc falou para ver se vai um valor para lá!

E sobre o botão perder a formatação no mozilla, vcs tem ideia do q possa ser?
Agradeço as dicas, assim q eu conseguir fazer os testes vou postar aqui!

C

O teste com o valor fixo não funcionou, e o problema com o uploadify com o mozilla é em certos computadores… testei de outros 2 e o botão aparece, e em compensação em outros 3 não apareceu.

Não sei qual o requisito para q funcione em todos os pcs… no i.e. funciona legauu, mas tem q funcionar no mozilla, pois é um trabalho da faculdade e escolhemos ele como navegador padrão!

Continuo tentando fazer o cd_album ser processado pelo uploadify.php…

Chaia

Ola

Estou tentando usar também uploadify, mas esta dando o seguinte erro: o HTTP Error 302.
Alguém tem idéia do que pode ser???
Tem outra forma de fazer uploads de múltiplos arquivos??? Tentei usar um input com vetor (Ex: arquivo[]), mas acusou erro.

Fico do aguardo
Obrigado

Lucas_Cavalcanti

estranho, pq 302 não é um erro, é um Redirect!

vc tá fazendo algum redirect na sua lógica?

vc tá usando a versão 3.1.3 do vraptor?

Chaia

Ola

Estou usando a Versão 3.1.2

Meu método no controller

public void anexar(UploadedFile uploadify, String sessionId){
	//Nem criei ainda a lógica do método, 	só tem um system para verificar se o arquivo esta chegando
         System.out.println("Arquivo:"+uploadify.getFileName()); 
}

O javascript

$(document).ready(function() {
	$("#uploadify").uploadify({
		'uploader'       : '${pageContext.request.contextPath}/js/uploadify.swf',
		'script'         : '${pageContext.request.contextPath}/projeto/anexar', 
		'cancelImg'      : '${pageContext.request.contextPath}/img/cancel.png',
		'folder'         : 'uploads',
		'queueID'        : 'fileQueue',
		'auto'           : true,
		'scriptData'     :  'sessionId: ${pageContext.request.session.id}',  
		'multi'          : true,
		'onError'        : function(event, queueID, fileObj, errorObj){
								alert("Error: " + errorObj.type + "\nInfo: " + errorObj.info);
			}			 
	});
});
Lucas_Cavalcanti

atualize para a versão 3.1.3 (precisa mudar o jar do paranamer pra 2.2 tb) e coloque no input o nome de arquivos[] , e então receba no seu Controller um List arquivos

ou substitua o nome arquivos pelo nome que o uploadfy usa… mas eh importante que tenha o []

eulen

Olá pessoal segui todas as recomendações do post, mas nao consigo fazer upload de multiplos arquivos, meu controller está recebendo apenas 1 arquivo, nunca a lista selecionada. Utilizo o vRaptor 3.3.1

no JSP está

<input id="inputArquivos" type="file" name="arquivos[]" />

no método eu tenho

public void processarArquivos(List<UploadedFile> arquivos, String ano, int categoria){
     //faz a cópia dos arquivos


    // verificando a lista de arquivos

     for(UploadedFile f:arquivos){
             System.out.println(">>>>>>>>>>>>>>>>>>>"+f.getFileName());

     }

}

Mas não tem jeito, só recebo um único arquivo. Já tentei alterar o nome do parametro para Filedata mas contino obtando o mesmo resultado. O que estou fazendo de errado?

Lucas_Cavalcanti

tentou com name=“arquivos[0]”? qual versão do vraptor?

eulen

Puxa Lucas vc é rápido no gatilho rsrsrs. Sim, acabei de tentar dessa forma, mas obtive o mesmo resultado.

Vraptor versão 3.3.1.

Lucas_Cavalcanti

vc tá com o jar do commons-fileupload e do commons-io no classpath?

eulen

Sim Lucas, commons-io-1.3.2.jar e commons-fileupload-1.2.1.jar.

Lucas_Cavalcanti

upload de um arquivo só funciona então?

eulen

Isso mesmo, funciona perfeitinho, mas so recebo um arquivo.

Lucas_Cavalcanti

testei aqui no blank-project e funcionou:

<form action="" method="post" enctype="multipart/form-data">
	<input type="file" name="arquivos[0]"> 
	<input type="file" name="arquivos[1]">
	<input type="submit"> 
</form>
@Path("/")
	public void index(List<UploadedFile> arquivos) {
		//...
	}

vc está usando algo parecido com isso?

eulen

Lucas Cavalcanti:
testei aqui no blank-project e funcionou:

<form action="" method="post" enctype="multipart/form-data">
	<input type="file" name="arquivos[0]"> 
	<input type="file" name="arquivos[1]">
	<input type="submit"> 
</form>
@Path("/")
	public void index(List<UploadedFile> arquivos) {
		//...
	}

vc está usando algo parecido com isso?

Hummmm não Lucas, eu pensei que poderia fazer upload de vários arquivos de uma vez só, usando penas um único input file. Vou testar isso amanhã, mas pelo jeito terei que fazer upload de um número limitado de arquivos é isso?

Lucas_Cavalcanti

vc pode criar um botão + que adiciona via javascript outro input file. No mesmo não rola.

outra saída é usar um plugin do jquery, como o uploadify http://uploadify.com

eulen

Lucas Cavalcanti:
vc pode criar um botão + que adiciona via javascript outro input file. No mesmo não rola.

outra saída é usar um plugin do jquery, como o uploadify http://uploadify.com

Pois é Lucas, por isso que postei nesse tópico, é exatamente esse plugin que estou tentando utilizar. Abaixo o script para chamar o uploadify.

<script type="text/javascript">
		$(function() {
			$("#arquivos").uploadify({
				  "uploader"       : '${pageContext.request.contextPath}/uploadify/uploadify.swf',
				  'script'         : '${pageContext.request.contextPath}/migracao/processarArquivos',
				  'cancelImg'      : '${pageContext.request.contextPath}/uploadify/cancel.png',
				  'buttonText'	   : 'Selecionar arquivos',
				  'folder'         : '${pageContext.request.contextPath}/uploads',
				  'multi'          : true,
				  'auto'           : false,
				  'fileExt'        : '*.pdf',
				  'fileDesc'       : 'Arquivos PDF (*.PDF)'
			});
			
			$("#envio").click(function(){
				$("#arquivos").uploadifyUpload();
			});
		});
		
</script>

No form estou fazendo assim:

<form enctype="multipart/form-data" method="post">
	<fieldset>
		<legend>Migrar documentos</legend>
		<label for="ano">Ano da publicação</label>
		<input type="text" id="ano" name="ano"/>
		
		<label for="ano">Categoria</label>
		<select id="categoria" name="categoria.id">
			<c:forEach var="categoria" items="${categorias}">
				<option value="${categoria.id}">${categoria.nome }</option>	
			</c:forEach>		
		</select>
		
		<label for="arquivos">Arquivos</label>
		<input type="file" id="arquivos" name="arquivos[]" >
		<button id="envio">Enviar</button>
	</fieldset>

</form>

e no controller:

public void processarArquivos(List<UploadedFile> arquivos, String ano, int categoraId){
		
		for(UploadedFile fd:arquivos){
			System.err.println(">>>>>>>>>>>>>>> "+fd.getFileName());
		}
		
		
}
Lucas_Cavalcanti

entendi…

o uploadify não passa todos os arquivos de uma vez, e sim um por um…

por padrão o nome que ele usa é FileData. Vc pode sobrescrever esse nome com a option fileDataName:

$("#arquivos").uploadify({  
                  "uploader"       : '${pageContext.request.contextPath}/uploadify/uploadify.swf',  
                  'script'         : '${pageContext.request.contextPath}/migracao/processarArquivos',  
                  'cancelImg'      : '${pageContext.request.contextPath}/uploadify/cancel.png',  
                  'buttonText'     : 'Selecionar arquivos',  
                  'folder'         : '${pageContext.request.contextPath}/uploads',  
                  'fileDataName' : 'arquivo', 
                  'multi'          : true,  
                  'auto'           : false,  
                  'fileExt'        : '*.pdf',  
                  'fileDesc'       : 'Arquivos PDF (*.PDF)'  
            });

e no controller:

public void processarArquivos(UploadedFile arquivo, String ano, int categoraId){
eulen

Lucas acredito que consegui achar o problema com meu código. Bastou devolver um objeto serializado que o uploadify funcionou corretamente. Entretanto vou ter que refatorar, pois não consigo receber outros dois parâmetros, nada muito difícil de resolver.

o controller ficou assim:

public void processarArquivos(List<UploadedFile> arquivos, String ano, int categoriaId){
		
		for(UploadedFile fd:arquivos){
			System.err.println(">>>>>>>>>>>>>>> nome do arquivo:"+fd.getFileName());
		}
		
		result.use(Results.json()).from(arquivos).serialize();
		
	}

O HTML ficou assim:

<script type="text/javascript">
		$(function() {
			$("#arquivos").uploadify({
				  "uploader"       : '${pageContext.request.contextPath}/uploadify/uploadify.swf',
				  'script'         : '${pageContext.request.contextPath}/migracao/processarArquivos',
				  'cancelImg'      : '${pageContext.request.contextPath}/uploadify/cancel.png',
				  'buttonText'	   : 'Selecionar arquivos',
				  'folder'         : '${pageContext.request.contextPath}/uploads',
				  'fileDataName'   : 'arquivos', 
				  'multi'          : true,
				  'auto'           : false,
				  'fileExt'        : '*.pdf',
				  'fileDesc'       : 'Arquivos PDF (*.PDF)'
			});
			
			$("#envio").click(function(){
				$("#arquivos").uploadifyUpload();
			});
		});
		
</script>


<form enctype="multipart/form-data" method="post">

	<fieldset>
		<legend>Migrar documentos</legend>
		<label for="ano">Ano</label>
		<input type="text" id="ano" name="ano"/>
		
		<label for="ano">Categoria</label>
		<select id="categoria" name="categoriaId">
			<c:forEach var="categoria" items="${categorias}">
				<option value="${categoria.id}">${categoria.nome }</option>	
			</c:forEach>		
		</select>
		
		<label for="arquivos">Arquivos</label>
		<input type="file" id="arquivos" name="arquivos" >
		<a href="#" id="envio">Enviar</a>
		
	</fieldset>

</form>

Obrigado Lucas pela atenção, vc é sempre bastante atencioso com todos que buscam ajuda aqui. Um abração

fidelis_felipe

Fiz deacordo o html e a controller acima mas no html da HTTP Error, nada no console.chega null na minha controller… falta algo?

Lucas_Cavalcanti

qual é o seu código?

fidelis_felipe

Claro, desculpa lucas, segue…

Fiz algumas tentativas…

pela controller do vraptor ficou assim…

meu jsp

&lt;script type="text/javascript" src="jquery.uploadify-v2.1.4/jquery-1.4.2.min.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript" src="jquery.uploadify-v2.1.4/jquery.uploadify.v2.1.4.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript" src="jquery.uploadify-v2.1.4/jquery.uploadify.v2.1.4.min.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript" src="jquery.uploadify-v2.1.4/swfobject.js"&gt;&lt;/script&gt;

        &lt;script type="text/javascript"&gt;
		$(function() {
			$("#arquivos").uploadify({
				  "uploader"       : '${pageContext.request.contextPath}/jquery.uploadify-v2.1.4/uploadify.swf',
				  'script'         : '${pageContext.request.contextPath}/upload',
				  'cancelImg'      : '${pageContext.request.contextPath}/jquery.uploadify-v2.1.4/cancel.png',
				  'buttonText'	   : 'Selecionar arquivos',
				  'folder'         : '${pageContext.request.contextPath}/anexos',
				  'fileDataName'   : 'arquivos', 
				  'multi'          : true,
				  'auto'           : false
			});
			
			$("#envio").click(function(){
				$("#arquivos").uploadifyUpload();
			});
		});
         &lt;/script&gt;
&lt;form enctype="multipart/form-data" method="post"&gt;

	&lt;fieldset&gt;
		&lt;input type="file" id="arquivos" name="arquivos" &gt;
		<a  >Enviar</a>
		
	&lt;/fieldset&gt;

&lt;/form&gt;

Meu controller esta assim, mas aki a lista ta null

@Post @Path("/upload")
	public void processarArquivos(List&lt;UploadedFile&gt; arquivos){
		
		for(UploadedFile atquivo:arquivos){
			System.err.println(arquivo.getFileName());
		}
		
		result.use(Results.json()).from(arquivos).serialize();
		
	}

Tentei ainda por um Servlet assim:
Populo um HashMap que tem {folder=/userfiles/image, ac=upload, Upload=Submit Query, Filename=fidelis_felipe_2011.pdf, Filedata=fidelis_felipe_2011.pdf}

Mas minha List<FileItem> items permanece null depois de List<FileItem> items = upload.parseRequest(req);

O que devo estar fazendo de errado Lucas?

System.out.println("UploadServlet invoked. Here are all uploaded files: ");
	        try {
	        	
	        	FileItemFactory factory = new DiskFileItemFactory();
				ServletFileUpload upload = new ServletFileUpload(factory);
	            List&lt;FileItem&gt; items = upload.parseRequest(req);
	            for (FileItem item : items) {
	                if (!item.isFormField()) {
	                    System.out.println("Name: " + item.getName());
	                    System.out.println("Size: " + item.getSize());
	                    System.out.println("Type: " + item.getContentType());
	                }
	            }
	        } catch (Exception ex) {
	            try {
					throw new ServletException(ex);
				} catch (ServletException ex2) {
					// TODO Auto-generated catch block
					ex2.printStackTrace();
				}
	        }
Lucas_Cavalcanti

vc não pode criar o uploadServlet, o próprio vraptor vai fazer isso… se vc coloca o Servlet o vraptor não vai ter acesso ao upload.

fidelis_felipe

Quero fazer mesmo pelo vraptor, esse servlet foi tentativa extra.

Levando em consideração que não tenho mais o servletes? minha list ta chegando null

Lucas_Cavalcanti

troque a List por apenas UploadedFile

o uploadify vai mandar um arquivo por vez

fidelis_felipe

Certo, funfou sim, pensei que ele mandava a lista.
Muito obrigado Lucas :smiley:

L

No meu caso está retornando um http status 302.

<script type="text/javascript" src="${pageContext.request.contextPath}/javascripts/uploadify/swfobject.js"></script>

        <script type="text/javascript" src="${pageContext.request.contextPath}/javascripts/uploadify/jquery.uploadify.v2.1.4.js"></script>

        <script type="text/javascript">
            $(document).ready(function() {
                
                $('#file').uploadify({
                    'uploader'  : '${pageContext.request.contextPath}/javascripts/uploadify/uploadify.swf',
                    'script'    : '${pageContext.request.contextPath}/upload/',
                    'buttonText': 'Selecionar arquivos',  
                    'cancelImg' : '${pageContext.request.contextPath}/javascripts/uploadify/cancel.png',
                    'folder'    : '${pageContext.request.contextPath}/javascripts/upload',
                    'fileDataName': 'arquivos',
                    'multi'          : false,  
                    'auto'           : false,  
                    'onError'     : function (event,ID,fileObj,errorObj) {
                        alert(errorObj.type + ' Error: ' + errorObj.info);
                      }                    
                  });

                $('#enviar').click(function(e){
                    $('#file').uploadifyUpload();                	
                });
                
                
             });
            
        </script>
<form enctype="multipart/form-data" method="post">
	
    <input type="file" id="file" name="file" />
     <a id="enviar" href="#">Upload Files</a>            

</form>

Método do controller que não é chamado.

@Post("/upload/")
	public void test(UploadedFile arquivos) {
		System.out.println(arquivos);
		System.out.println(">>>>>>>>>>>>>>");
		result.use(json()).from(arquivos).serialize();
	}

No console só aparece o log do CommonsUploadMultipartInterceptor.

INFO [CommonsUploadMultipartInterceptor] Request contains multipart data. Try to parse with commons-upload.
Lucas_Cavalcanti

o flash usa uma sessão diferente da da página… então se vc tem algum interceptor de autenticação ele vai dar 302 (redirecionar pra página de login, por exemplo)…

vc precisa fazer umas maracutaias pro flash usar a mesma sessão que o browser, ou deixar a lógica de upload aberta (autenticada de outro jeito que não a sessão do usuário). Ex via uri: /upload/{idDoUsuario}/{hashAPartirDoIdDoUsuario}

indivito

Senhores

fiz da forma como eulen indicou porém ainda assim sem sucesso.
Diz que nao encontrou o arquivo flash uploadify.swf e dai nao abre a janela pra escolher os arquivos.

Eu tive que mudar apenas uma coisa, a forma como o formulario eh submetido, tirei o link e coloquei um botao de submit.

HTML:

<script type="text/javascript">  
            $(function() {  
                $("#arquivos").uploadify({  
                      "uploader"       : '${pageContext.request.contextPath}/uploadify/uploadify.swf',  
                      'script'         : '${pageContext.request.contextPath}/migracao/processarArquivos',  
                      'cancelImg'      : '${pageContext.request.contextPath}/uploadify/cancel.png',  
                      'buttonText'     : 'Selecionar arquivos',  
                      'folder'         : '${pageContext.request.contextPath}/uploads/',  
                      'fileDataName'   : 'arquivos',   
                      'multi'          : true,  
                      'auto'           : false,  
                      'fileExt'        : '*.pdf',  
                      'fileDesc'       : 'Arquivos PDF (*.PDF)'  
                });  
                  
                $("#envio").click(function(){  
                    $("#arquivos").uploadifyUpload();  
                });  
            });  
              
    </script>  
      
      
    <form enctype="multipart/form-data" method="post"  action="<c:url value="/forecast/up" />" >  
      
        <fieldset>  
            <legend>Migrar documentos</legend>  
            <label for="ano">Ano - ${pageContext.request.contextPath}/uploadify/uploadify.swf</label>  
            <input type="text" id="ano" name="ano"/>  
              
            <label for="ano">Categoria</label>  
            <input type="text" id="categoria" name="categoriaId"/>
              
            <label for="arquivos">Arquivos</label>  
            <input type="file" id="arquivos" name="arquivos" >  
            
            <input type="submit" value="<fmt:message key="forecast.add.submit"/>">
              
        </fieldset>  
      
    </form>

alguma dica?

obrigado

L

Valeu lucas vou tentar implementar.

R

Pessoal estou tentando fazer o upload de um arquivo e esta sendo lançada a seguinte exception

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'transmitirArquivosController': Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.tivit.edi.ediweb.Arquivo]: Could not convert constructor argument value of type [br.com.caelum.vraptor.interceptor.multipart.DefaultUploadedFile] to required type [br.com.tivit.edi.ediweb.Arquivo]: Failed to convert value of type 'br.com.caelum.vraptor.interceptor.multipart.DefaultUploadedFile' to required type 'br.com.tivit.edi.ediweb.Arquivo'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [br.com.caelum.vraptor.interceptor.multipart.DefaultUploadedFile] to required type [br.com.tivit.edi.ediweb.Arquivo]: no matching editors or conversion strategy found

Meu form esta assim

<form action="<c:url value="/transmitir/upload"/>" enctype="multipart/form-data" method="post">
	<input type="file" name="arquivo"/>
	   <input type="submit"/>
	</form><br/>

O controller assim

package br.com.tivit.edi.ediweb.controller;

import java.io.IOException;
import java.util.List;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.interceptor.multipart.UploadedFile;
import br.com.caelum.vraptor.view.Results;
import br.com.tivit.edi.ediweb.Arquivo;

@Resource
public class TransmitirArquivosController {

	private final Validator validator;
	private final Arquivo arquivo;
	private final Result result;

	public TransmitirArquivosController(Arquivo arquivo, Validator validator, Result result) {
		this.validator = validator;
		this.arquivo = arquivo;
		this.result = result;
	}

	//Direciona para pagina de transmissão de arquivos
	@Get @Path("/arquivos")
	public void transmitirArquivos() {
	}


	@Post @Path("/transmitir/upload")
	public void upload(UploadedFile arquivos) throws IOException {

		validator.onErrorRedirectTo(TransmitirArquivosController.class).transmitirArquivos();
		arquivo.salva(arquivos);
		result.include("mensagem", "Upload realizado com sucesso");
		result.redirectTo(this).transmitirArquivos();
	}

}

A classe do arqgumento que esta sendo mencionada na exception é essa:

package br.com.tivit.edi.ediweb;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;

import javax.servlet.ServletContext;
import org.apache.commons.io.IOUtils;
import br.com.caelum.vraptor.interceptor.multipart.UploadedFile;
import br.com.caelum.vraptor.ioc.Component;

@Component
public class Arquivo {

	private Arquivo arquivos;

	public Arquivo getArquivo() {
		return arquivos;
	}

	public void setArquivo(Arquivo arquivos) {
		this.arquivos = arquivos;
	}

	private File dirArquivos;

	public Arquivo(ServletContext context) {
		//String caminhoImagens = context.getRealPath("C:/Imagens");
		dirArquivos = new File("D:/uploads");
		dirArquivos.mkdir();
	}

	public void salva(UploadedFile arquivo) throws IOException {

			 File destino = new File(dirArquivos, arquivo.getFileName());

			    try {
			    	 destino.createNewFile();
			    	 IOUtils.copyLarge(arquivo.getFile(), new FileOutputStream(destino));

			    } catch (FileNotFoundException e) {
				     e.printStackTrace();
				     throw new FileNotFoundException("Arquivo não encontrado!");

			    } catch (IOException e) {
			         e.printStackTrace();
			         throw new IOException("Não foi possivel enviar o arquivo!");
			    }
			         arquivo.getFile().close();
			}
		}

Algurm poderia me dar uma dica do que pode estar errado fiz igual ao exemplo da apostila e la funciona!!
Vlw

Lucas_Cavalcanti

o nome do input deveria ser arquivos…

o problema é que o input tá com o nome arquivo, que já é o nome do componente Arquivo.

R

Vlw Lucas!! Cara vc da aula la na caelum tambem ou fica so na parte de desenvolvimento?

Lucas_Cavalcanti

dou aulas também :wink:

R

Lucas estou tentando utilizar o uploadify so que estou com algumas duvidas copiei os exemplos anteriores deste post a principio esta dando erro de limite excedido o arquivo que estou tentando enviaré um ZIP tem 11KB,
não esta mostrando a barra de progresso e so consigo enviar arquivos .jar e .txt!!

LOG DO ERRO:

12:00:24,533 DEBUG [VRaptor             ] VRaptor received a new request
12:00:24,624 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor CommonsUploadMultipartInterceptor
12:00:24,624  INFO [CommonsUploadMultipartInterceptor] Request contains multipart data. Try to parse with commons-upload.
12:00:24,692 DEBUG [CommonsUploadMultipartInterceptor] Using repository d:\Users\RODRIG~1.EXT\AppData\Local\Temp for file upload
12:00:24,693  WARN [CommonsUploadMultipartInterceptor] The file size limit was exceeded.
org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (11146529) exceeds the configured maximum (2097152)
	at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:937)
	at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:351)
	at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
	at br.com.caelum.vraptor.interceptor.multipart.CommonsUploadMultipartInterceptor.intercept(CommonsUploadMultipartInterceptor.java:101)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	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:123)
	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:1001)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
12:00:24,705 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
12:00:24,706 DEBUG [DefaultResourceTranslator] trying to access /upload
12:00:24,756 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: TransmitirArquivosController.uploadTransmitirArquivosController.upload(UploadedFile)]
12:00:24,762 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor
12:00:24,900 DEBUG [IogiParametersProvider] IogiParametersProvider is up
12:00:24,910 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor
12:00:24,912 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for TransmitirArquivosController.upload(UploadedFile) as [arquivos]
12:00:24,913 DEBUG [IogiParametersProvider] getParametersFor() called with parameters Parameters() and targets [Target(name=arquivos, type=interface br.com.caelum.vraptor.interceptor.multipart.UploadedFile)].
12:00:24,916  WARN [UploadedFileConverter] There was an error when uploading the file {}. Please verify if commons-fileupload jars are in your classpath or you are using a Servlet 3 Container.
12:00:24,917 DEBUG [ParametersInstantiatorInterceptor] There are conversion errors: [ValidationMessage{category=arquivos, message=Invalid upload, parameters=null}]
12:00:24,917 DEBUG [ParametersInstantiatorInterceptor] Parameter values for [DefaultResourceMethod: TransmitirArquivosController.uploadTransmitirArquivosController.upload(UploadedFile)] are [null]
12:00:24,920 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor
12:00:25,019 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor
12:00:25,027 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor AutorizacaoInterceptor
12:00:25,033 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor
12:00:25,033 DEBUG [ExecuteMethodInterceptor] Invoking TransmitirArquivosController.upload(UploadedFile)
12:00:25,034 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for TransmitirArquivosController.upload(UploadedFile) as [arquivos]
12:00:25,126 DEBUG [CglibProxifier      ] a proxy for interface br.com.caelum.vraptor.view.LogicResult is created as class br.com.caelum.vraptor.view.LogicResult$$EnhancerByCGLIB$$c6141aea
12:00:25,127 DEBUG [DefaultLogicResult  ] redirecting to class TransmitirArquivosController
12:00:25,128 DEBUG [CglibProxifier      ] a proxy for class br.com.tivit.edi.ediweb.controller.TransmitirArquivosController is created as class br.com.tivit.edi.ediweb.controller.TransmitirArquivosController$$EnhancerByCGLIB$$9788f624
12:00:25,135 DEBUG [CglibProxifier      ] a proxy for class br.com.tivit.edi.ediweb.controller.TransmitirArquivosController is created as class br.com.tivit.edi.ediweb.controller.TransmitirArquivosController$$EnhancerByCGLIB$$9788f624
12:00:25,135 DEBUG [DefaultLogicResult  ] redirecting to /NEWEDI_ediweb/arquivos
12:00:25,136 DEBUG [VRaptor             ] VRaptor ended the request
12:00:26,287 DEBUG [VRaptor             ] VRaptor received a new request
12:00:26,351 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
12:00:26,351 DEBUG [DefaultResourceTranslator] trying to access /arquivos
12:00:26,352 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: TransmitirArquivosController.transmitirArquivosTransmitirArquivosController.transmitirArquivos()]
12:00:26,360 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor
12:00:26,363 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor
12:00:26,378 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor
12:00:26,386 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor AutorizacaoInterceptor
12:00:26,390 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor
12:00:26,390 DEBUG [ExecuteMethodInterceptor] Invoking TransmitirArquivosController.transmitirArquivos()
12:00:26,393 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ForwardToDefaultViewInterceptor
12:00:26,394 DEBUG [ForwardToDefaultViewInterceptor] forwarding to the dafault page for this logic
12:00:26,408 DEBUG [DefaultPageResult   ] forwarding to /WEB-INF/jsp/transmitirArquivos/transmitirArquivos.jsp
12:00:26,413 DEBUG [DefaultStaticContentHandler] Deferring request to container: /NEWEDI_ediweb/WEB-INF/jsp/transmitirArquivos/transmitirArquivos.jsp 
12:00:26,514 DEBUG [VRaptor             ] VRaptor ended the request

porem ja imaginava que ia acontecer algo do tipo vou te mostrar o codigo e comentar nas linhas que estou duvidas se puder me ajudar mais essa vez agradeço:

Abaixo o meu form

<%@ include file="/cabecalho.jsp" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
     
     <script type="text/javascript" src="<c:url value="/uploadify/jquery.js"/>"></script>
     <script type="text/javascript" src="<c:url value="/uploadify/jquery.uploadify-3.1.js"/>"></script>
     <script type="text/javascript" src="<c:url value="/uploadify/jquery.uploadify-3.1.min.js"/>"></script>
     <script type="text/javascript" src="<c:url value="/uploadify/swfobject.js"/>"></script>

     <script type="text/javascript">
       (function() {
          $("#arquivos").uploadify({
            "uploader"       : '${pageContext.request.contextPath}/uploadify/uploadify.swf',
            'script'             : '${pageContext.request.contextPath}/upload',
            'cancelImg'      : '${pageContext.request.contextPath}/uploadify/cancel.png',
            'buttonText'     : 'Selecionar arquivos',
            'folder'            : '${pageContext.request.contextPath}/anexos',  <!--  O que tenho de colocar nesta linha ?-->
            'fileDataName'  : 'arquivos',   <!--  O que tenho de colocar nesta linha ?-->
            'multi'              : true,
            'auto'               : false
});


<!--("#envio")  de quem seria esse Id?    --> 
$("#envio").click(function(){
    $("#arquivos").uploadifyUpload();
});
);
      </script>
	<body class="inputFile">
		<fieldset style="border: 2; border-color: red;">
		<div class="menuSelect">
			<select>
				<option selected="selected">Remetente</option>
				<option>Remetente 1</option>
				<option>Remetente 2</option>
				<option>Remetente 3</option>
				<option>Remetente 4</option>
				<option>Remetente 5</option>
				<option>Remetente 6</option>
			</select>
			<select>
				<option selected="selected">Tipo de Arquivo</option>
				<option>Compactado</option>
				<option>Binario</option>
				<option>Texto</option>
				<option>Edifact</option>
				<option>Texto para Tradução</option>
			</select>
			<select>
				<option selected="selected">Tipo Documento</option>
				<option>Documento Tipo Orders</option>
				<option>Tipo Documento</option>
				<option>Tipo Documento</option>
				<option>Tipo Documento</option>
				<option>Tipo Documento</option>
				<option>Tipo Documento</option>
			</select>
		</div><p>
		<div>
			<c:if test="${not empty error}">${error}<br/><br/></c:if>

				<form action="<c:url value="/upload"/>" enctype="multipart/form-data" method="post">
					<input type="file" id="arquivos" name="arquivos"/>
					<input type="submit"/>
				</form><br/>

		</div>
		</fieldset>
	</body>

<%@ include file="/rodape.jsp" %>

O MEU CONTROLLER:

package br.com.tivit.edi.ediweb.controller;

import java.io.IOException;
import java.util.List;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.interceptor.multipart.UploadedFile;
import br.com.caelum.vraptor.view.Results;
import br.com.tivit.edi.ediweb.Arquivo;

@Resource
public class TransmitirArquivosController {

	private final Validator validator;
	private final Arquivo arquivo;
	private final Result result;

	public TransmitirArquivosController(Validator validator, Arquivo arquivo, Result result) {
		this.validator = validator;
		this.arquivo = arquivo;
		this.result = result;
	}

	//Direciona para pagina de transmissão de arquivos
	@Get @Path("/arquivos")
	public void transmitirArquivos() {
	}


	@Post @Path("/upload")
	public void upload(UploadedFile arquivos) throws IOException {

		validator.onErrorRedirectTo(TransmitirArquivosController.class).transmitirArquivos();
		arquivo.salva(arquivos);
		result.include("mensagem", "Upload realizado com sucesso");
		result.redirectTo(this).transmitirArquivos();
	}

}

O METODO salva() da classe Arquivo:

package br.com.tivit.edi.ediweb;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import javax.servlet.ServletContext;
import org.apache.commons.io.IOUtils;
import br.com.caelum.vraptor.interceptor.multipart.UploadedFile;
import br.com.caelum.vraptor.ioc.Component;

@Component
public class Arquivo {

	private Arquivo arquivos;

	public Arquivo getArquivo() {
		return arquivos;
	}
	public void setArquivo(Arquivo arquivos) {
		this.arquivos = arquivos;
	}
	private File dirArquivos;

	public Arquivo(ServletContext context) {
		//String caminhoImagens = context.getRealPath("C:/Imagens");
		dirArquivos = new File("D:/uploads");
		dirArquivos.mkdir();
	}
	public void salva(UploadedFile arquivo) throws IOException {
			 File destino = new File(dirArquivos, arquivo.getFileName());
			    try {
			    	 destino.createNewFile();
			    	 IOUtils.copyLarge(arquivo.getFile(), new FileOutputStream(destino));

			    } catch (FileNotFoundException e) {
				     e.printStackTrace();
				     throw new FileNotFoundException("Arquivo não encontrado!");

			    } catch (IOException e) {
			         e.printStackTrace();
			         throw new IOException("Não foi possivel enviar o arquivo!");
			    }
			         arquivo.getFile().close();
			}
		}
Lucas_Cavalcanti

o tamanho que ele tá reclamando é: 11146529, que é ~ 11Mb, não 11Kb

o máximo que ele faz é 2Mb, mas vc pode configurar isso se precisar…

o que vc falou dos jars e txts ele só mostra esse tipo de arquivo?

R

Então ele so estava enviando arquivos jar e txts , mas concerteza deve ser por causa do tamanho, beleza essa configuração do tamanho pesquisei e ja resolvi mas o uploadify ainda não funciona não mostra a barra de progresso (estou usando IE8 infelizmente) bom como eu copiei o codigo desse post fiquei com duvida em algumas linhas talvez possa ser isso que ainda não funciona o uploadify

na linha 17 (‘folder’ : ‘${pageContext.request.contextPath}/anexos’, <!-- esse seria o nome do local p/ onde deve ir os uploads ?)

na linha 18 (‘fileDataName’ : ‘arquivos’, )

na linha 25 tem essa function abaixo que qdo copiei do post não mencionava onde deveria chama-la seria no input file?

$("#envio").click(function(){

$("#arquivos").uploadifyUpload();

});

);
Lucas_Cavalcanti

pode tirar a folder, pq é uma conf útil qdo vc usa PHP só… o fileDataName é isso mesmo, o mesmo nome do UploadedFile,

essa parte do #envio, acho que vc não precisa disso… o proprio .uploadfy deveria criar um botão de iniciar o download.

Criado 11 de maio de 2010
Ultima resposta 17 de jul. de 2012
Respostas 67
Participantes 11