sexta-feira, 27 de maio de 2011

Como carregar todo tipo de arquivo em Blob?

Boa pergunta hein, e a resposta é mais simples do que voce imagina.

Você só precisa definir um novo atributo na estrutura da transação (em que o Blob esteja definido) para armazenar a extensão do arquivo carregado, e em seguida na propriedade FileTypeAttribute definir esse atributo.

Por exemplo, definimos na estrutura a seguir dois atributos, um para o Blob e outro para a extensão.



Em seguida, basta definir na propriedade FileTypeAttribute  do blob o nome do atributo extensão.

O Genexus tratará as extensões corretas e apresentará o resultado na interface sem nenhum problema, mesmo que estejamos falando de PNG, JPG, XLS, e cuidado! EXE!



Outro cuidado a tomar é o armazenamento do Blob na mesma estrutura principal do registro, a tabela ficará gigante, e consequentemente, lenta.





3 comentários:

Lucas Mion disse...

Boa tarde Douglas,

Gostaria de sabe como eu faço para gravar e carregar(em um update), uma imagem. Vou falar o processo que fiz.

Criei os seguintes atributos:
-Foto
-FotoTipo
-FotoNome

primeiro problema que me surgiu:

Quando eu escolho uma imagem ela somente é exibida depois de um comando "REFRESH".

Segundo problema:

No banco o campo "FOTO" fica "binary data", é assim mesmo? Os outros 2 campos são preenchidos corretamente quando gravado.

Terceiro problema:

Quando vou fazer um "UPDATE" no cadastro, a imagem cadastrada não carrega.

Você poderia me ajudar?

Grato,

Lucas. SKYPE(mion.vikam)

Douglas Hamilton de Oliveira disse...

Oi Lucas,

Quanto ao binary data, de fato a imagem é gravada no banco de dados no formato de dados binarios, e no momento em que abre a mesma, o Gx recupera essa informação e a grava como uma imagem fisica (com a extensão indicada em FotoTipo, por exemplo) para que possa ser aberta pelo navegador.

Por isso é que existem dois diretórios temporarios que são utilizados pelo Gx para realizar o upload e download da imagem no banco. Aparecem no web.config:
add key="CS_BLOB_PATH" value="PublicTempStorage"
add key="TMPMEDIA_DIR" value="PrivateTempStorage"

Quanto a essas questões operacionais (refresh, update), isso fica meio estranho pra mim, precisaria conhecer melhor a implementação que fez ai para poder dar uma opinão mais concreta.
ab

Mary disse...

Olá! Por favor, será que alguém saberia me dizer se é possível carregar uma imagem em uma coluna do EXCEL?