Arquivos no repositorio
28/06/2012 19:04
1
Pessoal,


estou com um problema e não sei bem como resolvê-lo. Preciso salvar arquivos de diferentes tamanhos em repositorios. Preciso criar um repositorio com o ID da classe e nele salvar os arquivos, porém não sei nem por onde começar.

Procurei algum tutorial que pudesse me ajudar porém não encontrei nenhum.

Alguém poderia me ajudar?
Tags: repositorio, arquivos,


0
Oi, me explica melhor o seu problema.


0
Ola Henrique,

eu gostaria apenas de ao fazer upload de um arquivo (pdf, doc, jpeg, etc) ele salvasse o arquivo em uma pasta e salvasse em um diretorio. Basicamente isso.

Vi o curso que fez para a DEV só que lá vc salva o arquivo no banco de dados. Como alguns arquivos grandes tornam a recuperação lenta quero salvá-los em um diretorio, porém não sei nem por onde começar. Não achei sequer um tutorial que me ajudasse.

Você saberia me informar o que eu faço para após o upload gerar um diretorio e salvar o arquivo nele?

por favor me dá uma ajuda.

30/06/2012 00:28


1
Oi,

bom: vamos lá. O mais importante é que você tenha uma boa estratégia para que seja criada uma árvore de diretórios fácil de ser gerenciada.

Salvar arquivos no banco de dados nem sempre é uma boa alternativa (normalmente não é). O ideal é você realmente armazená-los no sistema de arquivos. Normalmente seus arquivos estão relacionados com entidades que podem ser categorizáveis.

Então, o ideal é que sua estrutura de diretórios, sempre esteja inicialmente com o seguinte formato:


/diretorioRaizAondeAsCoisasSaoSalvas/[nome da entidade]


Você também poderia fazer algo como o exemplo abaixo:


/diretorioRaizAondeAsCoisasSaoSalvas/entidade/{id}


E la dentro ir salvando quantos arquivos queira. Só há um problema, e que você só se deparará com ele no futuro: alguns sistemas de arquivos não comportam um número grande de itens (diretórios ou pastas) por diretório. Nós sempre pensamos que este dia nunca vai chegar mas, acredite: ele chega. Quando você está próximo dos 32000 itens em um diretório é que começa a sofrer com isto.

A estratégia portanto é minimizar o número de itens por diretório. Uma prática que você pode adotar é usar a data de criação do registro como parte do seu caminho, como no exemplo abaixo:


/diretorioRaizAoneAsCoisasSaoSalvas/entidade/ano/mes/dia/{id da entidade}


Assim você evita ao máximo que este tipo de problema ocorra. Dado que difícilmente seu sistema durará mais de 32000 anos, este problema é eliminado de cara.

Outro ponto importante: documente o algoritmo de obtenção do diretório aonde as classes da entidade são salvas. Para manter o negócio ainda mais consistente, salve o caminho do arquivo no banco de dados para fins de comparação e auditoria.

Estas são as diretivas basicas que te passo. O restante é lidar com upload de arquivos no Grails e lidar com a API de IO padrão do Java/Groovy.

Precisando de qualquer coisa, to ai.


0
Henrique,


obrigado pelas dicas. Me ajudaram bastante. O que eu quero fazer é justamente isso: "/diretorioRaizAondeAsCoisasSaoSalvas/entidade/{id}" porque não teremos no mesmo diretorio muitos arquivos.

Minha dúvida surge a partir daí com a manipulação desses arquivos após o upload. Vou tentar exemplificar abaixo:


Upload Form:

<br />
<g:uploadForm action= > "upload"
<input type= name= /> "file" "myFile"
<input type= /> "submit"
</g:uploadForm>


e no Controller:

def upload() {
def f = request.getFile('myFile')
if (f.empty) {
flash.message = 'file cannot be empty'
render(view: 'uploadForm')
return
}
f.transferTo( new File('/some/local/dir/{$usuario.id}/myfile.txt'))

agora, observe que neste exemplo ele salva apenas o arquivo em formato TXT. Agora, que vem algumas duvidas:

1) como faço para que ele salve o arquivo automaticamente na extensão correta (por exemplo se fosse PDF, DOC, PPT, ETC, salvando automaticamente nas mesmas extensões, paar que quando fizesse referencia ao link do arquivo não precisasse implementar nada)?

2) Como faço para ler um diretorio e saber quantos e quais arquivos (PDF, DOC, JPEG, Etc) existem ali (sei que devo usar o comando each, porém não sei como implementar ele na estrutura de diretorios)?

3) Se eu quiser abrir um arquivo TXT desses e procurar uma palavra como faria a estrutura de comandos?

4) se você possuir referencias que poderiam ajudar meu entendimento com o trabalho de arquivos (file) e suas manipulações no Grails, porfavor compartilhe.

Muito obrigado pela sua colaboração. Você não faz idéia do tanto que seus esclarecimentos tem me ajudado.
30/06/2012 21:31


0
Oi Ilmon, às suas perguntas

1) Ou você espera que o nome do arquivo já venha com a extensão correta ou então usa algum algoritmo para detectar o tipo. Se for pra descobrir, provavelmente você só o fará após ter feito o upload do arquivo. Da uma olhada neste link.

2) Use a classe File padrão do java (java.io.File). Nela tem um método chamado getFiles() que retorna um array do tipo File.

3) Ou sequencialmente com um BufferedReader do Java ou usando alguma outra técnica, como indexação, por exemplo (da uma olhada no Lucene)

4) Busque por IO Groovy para saber o que Groovy adiciona neste ponto no Java e também da uma lida no javadoc da API java dos pacotes java.io e java.nio


0
Henrique,


muito obrigado pelas dicas.

Todas as respostas foram satisfatórias. O link que vc passou é muito interessante.

Grande abraço.

02/07/2012 23:19



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