Quando trabalhamos com arquivos do tipo Blob (Binay large object), nos deparamos com situações onde devemos armazenar, em atributos ou variáveis, o nome e a extensão original do arquivo informado.
Trabalhando com Atributos
Ao trabalharmos com atributos isso pode ser realizado de uma forma bem simples. Por exemplo, em uma transação teremos 3 variáveis:
- File - blob;
- FileName - varchar(40);
- FileType - varchar(5);
Para gravarmos o nome e a extensão original do arquivo selecionado pelo usuário, devemos definir nas propriedades do atributo File (blob) as seguintes características:
Trabalhando com Variáveis
Um dos problemas em se trabalhar com variáveis do tipo Blob, é a falta de uma função para capturarmos o nome original do arquivo.
Por exemplo, quando o usuário da nossa aplicação deseja enviar algum arquivo via FTP ou Email, somos obrigados a gravar este arquivo em uma tabela para dessa forma, obtermos o nome original deste. Caso essa gravação não seja realizada, o arquivo enviado pelo usuário, automaticamente, é aberto na pasta "Temp media directory", que por padrão é a pasta "PublicTempStorage", e, recebe um nome aleatório.
Neste post irei demonstrar como podemos obter o nome original deste arquivo através da biblioteca Jquery.
Em uma Web Panel, adicionei à tela, duas variáveis e um botão. As variáveis definidas foram:
- &Blob - blob;
- &FileName - Varchar(40)
Agora precisamos programar a função em Jquery que irá executar esta captura do nome original. Para isso, utilizei a função "blur". Esta função é justamente o oposto da função "focus", ou seja, quando a variável blob perder o foco, o procedimento irá se executar. Vejamos:
Event Start
//=====Adiciona a biblioteca Jquery=====
Form.JScriptSrc.Add('http://code.jquery.com/jquery-latest.js">')
//=====Inicio do Script=====
Form.HeaderRawHTML = '<script type="text/javascript">'
Form.HeaderRawHTML += '$(document).ready(function(){'
//=====Quando a variável Blob perder o foco, executa=====
Form.HeaderRawHTML += '$("#vBLOB").blur(function(){'
Form.HeaderRawHTML += 'var nome = $("#vBLOB").val();'
Form.HeaderRawHTML += 'nome = nome.match(/[-_\w]+[.][\w]+$/i)[0];'
//=====Define o valor da variavel File name=====
Form.HeaderRawHTML += '$("#vFILENAME").val(nome);'
Form.HeaderRawHTML += '});'
Form.HeaderRawHTML += '});'
Form.HeaderRawHTML += '</script>'
EndEvent
//=====Adiciona a biblioteca Jquery=====
Form.JScriptSrc.Add('http://code.jquery.com/jquery-latest.js">')
//=====Inicio do Script=====
Form.HeaderRawHTML = '<script type="text/javascript">'
Form.HeaderRawHTML += '$(document).ready(function(){'
//=====Quando a variável Blob perder o foco, executa=====
Form.HeaderRawHTML += '$("#vBLOB").blur(function(){'
Form.HeaderRawHTML += 'var nome = $("#vBLOB").val();'
Form.HeaderRawHTML += 'nome = nome.match(/[-_\w]+[.][\w]+$/i)[0];'
//=====Define o valor da variavel File name=====
Form.HeaderRawHTML += '$("#vFILENAME").val(nome);'
Form.HeaderRawHTML += '});'
Form.HeaderRawHTML += '});'
Form.HeaderRawHTML += '</script>'
EndEvent
Mais uma ótima utilização de Jquery, qualquer dúvida o email genexus@outlook.com é ótimo para receber qualquer coisa. Abraço.
Parabéns pela solução e muito obrigado, me ajudou bastante na mesma situação em que eu precisava gravar o nome dos arquivos da variável Blob do webpanel no momento do upload. Apenas adicionei passos para no evento Enter quebrar com substring a variável &FileName em filename e filetype, e junto com o Blob adicioná-los no banco conforme precisava através de Business Component. []'s
ResponderExcluirMuito bom, e PARABÉNS ... nota 10, valeu pela ajuda!!!
ResponderExcluirEstou trabalhando com variavel, e para mim retornou vazio, mesmo assim obrigado!
ResponderExcluirMuito útil. O colega Felipe Neves que indicou seu artigo. Vocês me salvaram do flash para upload.
ResponderExcluirEste comentário foi removido pelo autor.
ResponderExcluirForm.HeaderRawHTML += 'nome = nome.match(/[-_ \w]+[.][\w]+$/i)[0];'
ResponderExcluirPara incluir arquivos onde tem espaço entre os nomes resolvi colocando um espaço após o simbolo _
Agora como faço para incluir as acentuações, pois quando tenho arquivos com acentuação ele corta o nome a partir da acentuação, tipo "Atualização 2019.pdf" ele retorna "o 2019.pdf" ?
Form.HeaderRawHTML += 'nome = nome.match(/[A-Za-zÀ-ú0-9-_ \w]+[.][\w]+$/i)[0];'
Excluir