Erro ao retornar url de arquivo em ambiente de produção
12/07/2012 12:56
0
Olá, amigos!

Estou com um grande problema... O meu sistema faz upload de arquivos txt e depois inicia o processamento dos mesmos. Testei em ambiente de dev e tudo funciona perfeitamente.
Ao subir o arquivo .war para o servidor, o upload está funcionando perfeitamente... Mas ao chamar o método responsável pelo processamento, estou recebendo um "FileNotFoundException":

URI: /importacao/processaArquivos
Class: java.io.FileNotFoundException
Message: ServletContext resource [/uploads/arquivo/12072012] cannot be resolved to URL because it does not exist


O código que uso no meu controlador para pegar o arquivo:

File pasta = grailsApplication.parentContext.getResource( params.caminhoCompleto ).file
File f = new File(pasta.absolutePath.toString())


Lembrando que o código funciona sem problemas em ambiente de dev... E só dá erro em produção. Alguém pode me ajudar??

Muito obrigado!
Tags: ServletContext, upload, FileNotFoundException, getResource


1
Olá, Ronaldo.

Que valor costuma vir no parâmetro "caminhoCompleto"?

Lembra que teu ambiente de produção pode ser muito diferente do de desenvolvimento.
Ex:
No desenvolvimento teus arquivos ser trabalhados em c:\Usuários\Ze Buduia\Documentos\projetoX (exemplo de ambiente Windows)
E em produção podem ser em \home\hostX\app\jboss\projetoX (exemplo de ambiente Linux)


0
Olá, Yoshiriro!

O valor que retorna a variável "caminhoCompleto" é:
/uploads/arquivo/12072012


Onde "upload" é um diretório que criei que fica dentro da pasta "web-app". E o diretório "arquivo/12072012" é criado no momento que o usuário faz o upload do arquivo.

Muito obrigado!
12/07/2012 13:49


0
Pois é Ronaldo.

O que ocorre é que você está usando um caminho relativo. Não há nada de errado nisso, só que você deve saber que esse caminho é relativo à pasta de trabalho do Servidor que em seu ambiente de produção é diferente do de desenvolvimento.

Quando você executa um projeto grails, seja "no braço", seja via IDE, a pasta de trabalho é uma. Quando gera o .war e manda para um AS, ela é outra.


0
Minha aplicação está em uma hospedagem gratuita por alguns dias, apenas para testes até a data de expiração do ambiente. Como havia dito antes, a parte de uploads parece funcionar perfeitamente. Apenas o processamento do arquivo que tá dando problema.

O meu problema é: Preciso criar uma pasta na minha aplicação que vai salvar o arquivo que o usuário irá fazer upload. Em sequência, o arquivo será processado com o intuito de popular minhas classes (seria uma forma de permitir uma manutenção de cadastro em lote, já que o fluxo de informações são muitas e fazer um à um não dá...).

Como poderia resolver esse problema do upload nesse caso? Como retornar o caminho absoluto do servidor (hoje pode ser um, amanhã pode ser outro...)?

Muito obrigado.
12/07/2012 16:04


1
Ronaldo, esquece aquilo que escrevi antes. Na verdade deveria funcionar como você fez, sim.

Gerei aqui um .war e joguei num AS local e encontrou o arquivo de teste que criei, sem problemas.

Acredito que o problema seja nas permissões de seu provedor.

Mas uma coisa que não entendi no teu código foi a replicação. Por que a linha
File f = new File(pasta.absolutePath.toString())

?
A linha anterior já deveria conter a representação da pasta que você queria. Não vi motivo para se criar outro objeto do tipo file.


0
Vc tem razão, poderia colocar tudo em uma única linha. Vou refatorar.

Mas como foi que você conseguiu retornar o path? Fazendo da mesma forma como eu fiz? Poderia postar o trecho do código?

Outra dúvida: Se o problema for de permissão do servidor, não deveria retornar outro erro ao invés de FileNotFoundException? Ele diz que a url não pode ser resolvida por que não existe. Pergunto porq realmente não entendo muito sobre essas políticas de segurança de servidores.

* Para conhecimento: Estou hospedando no Jelastic.com e usando o Tomcat 6.

Valeu, Yoshiriro!
12/07/2012 17:46


0
Fala galera eu estava com problema parecido para subir algumas imagens e solucionei com o seguinte trecho de codigo!


params.logo = request.getSession().getServletContext().getRealPath("") + File.separator+ 'images'+File.separator+'bg-logo-dashboard.png'
14/04/2015 17:43


0
Olá Ronaldo, esta etapa de criação que o usuário faz... /uploads/arquivo/12072012 criando a pasta "arquivo" e em seguida o upload... Esta pasta chega a ser criada?

Se ele consegue criar a pasta provavelmente não seria problema de permissão.
Porém se não está conseguindo pode ser sim.

O /uploads poderia significar que a pasta está dentro do / e não dentro da pasta web-app.
16/04/2015 16:32



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto