tenho um jsp onde envio um arquivo, botei o multipart e tudo certinho…
tenho uma controller onde recebo ele certinho:
String realPath = requestInfo.getServletContext().getRealPath(
"/anexos");
File destino = new File(realPath, anexo.getFileName());
IOUtils.copyLarge(anexo.getFile(), new FileOutputStream(destino));
tenho um problema o jboss ta fazendo deploy em um temp… isso é normal O.o?
entao quando pego o caminho relativo me vem isso aqui “D:\programas\jboss-6.0.0.20100216-M2\server\default\tmp\5c4o52s-8it1h5-gd06q3me-1-gd06r4mh-9t\meuprojeto.war” ou seja se eu renicia o servidor eu perco meus anexos pq eles ficaram em outro tmp =/
o que vc quer fazer exatamente, mostrar o anexo na tela? a imagem?[/quote]
Não não, quero que só aparece o caminho já ta bom… preciso se eu for alterar a tela e clicar em salvar ele não salve null, salve exatamente o que tinha antes…
e outra coisa que estranhei é que se ponho um arquivo maior que 2mb a minha controller recebe TODOS os parametros null, não somente o anexo, tem como muda isso?
geralmente não faz muito sentido preencher o input file no servidor… isso pq o caminho que vc coloca lá é o caminho na máquina do cliente, não no servidor… se eu não me engano o atributo value não funciona nesses inputs…
pra ele não salvar null, é só colocar o valor antigo no seu controller… o ideal é fazer algo assim:
public void altera(Entidade entidade, UploadedFile arquivo) {
Entidade persistida = dao.load(entidade.getId());
//validações
//coloque abaixo só os atributos que vieram do formulario
persistida.setAtributo1(entidade.getAtributo1());
persistida.setAtributo2(entidade.getAtributo2());
persistida.setAtributo3(entidade.getAtributo3());
if (uploadedFile != null) {
Arquivo a = //processa o arquivo
persistida.setAtributo4(a);
}
//não precisa fazer o dao.merge ou coisa do tipo, já vai acontecer automático qdo vc comitar a transacao
}
só criar uma classe anotada com @Component que implementa MultipartConfig…
o problema é que se os outros parâmetros da requisição vêm junto com o arquivo que vc tah fazendo upload… se o arquivo é muito grande, não tem mto como separar os outros parametros sem parsear esse arquivo…
o ideal é vc não misturar o upload com o resto do formulário… faça um form só pro upload, e outro pro resto dos atributos… se vc der uma olhada nos sites por aí, é assim que eles fazem
segue eu na briga dos upload… apareceu agora mais um porém…
-eu uso @put pra enviar meus formularios de alteração,
seguindo aquele meu exemplo que quando anexava algo além dos 2mb de tamanho, enviava todos parametros null (desta forma eu consegui tratar. @post), porém quando utilizo o @put da erro antes de chegar no meu método (somente quando passa dos 2mb)…
[code]HTTP Status 405 -
type Status report
message
description The specified HTTP method is not allowed for the requested resource ().
JBoss Web/3.0.0-beta-2[/code]
[quote=Lucas Cavalcanti]fazer um upload você tá acrescentando uma coisa no sistema (um arquivo) sem saber onde ele vai ser guardado… então o form de upload deveria ser POST…
qto ao form de edição (sem upload) PUT é mais legal mesmo =)[/quote]
mas com PUTda erro antes mesmo de chega no meu método se ele passar dos 2mb de anexo e assim fica inviavel de eu tratar…
sim, pq vc tah fazendo o put via _method, que eh um parâmetro do request… quando ultrapassa o tamanho do arquivo, não tem como recuperar os outros parâmetros do request, pq eles estão junto com o arquivo…
vc pode alterar o limite, fazer um request PUT de verdade (não sei se vai funcionar em todos os navegadores), ou separar o upload em outro form, com method=POST
da parte do VRaptor não sei se tem como a gente resolver isso, de qqer forma eu vou investigar…