Como fazer upload de arquivos no Oracle Forms 10g

Este código foi utilizado em um dos sistemas que criei. O arquivo é gravado no campo blob Arquivo, na tabela Arquivo.


PROCEDURE uploadArquivo IS

llng_idArquivo ARQUIVO.ID%TYPE;
lstr_caminhoArquivo VARCHAR2(4000);
lstr_nomeArquivo VARCHAR2(255);
lstr_extensaoArquivo VARCHAR2(4);

BEGIN

-- ----------------------------------------------------------------------------------------------------
-- Abre a caixa de dialogo para o usuário selecionar o arquivo que ele deseja enviar.
-- ----------------------------------------------------------------------------------------------------

lstr_caminhoArquivo := client_get_file_name(directory_name => 'C:',
file_name => NULL,
file_filter => 'ALL Files (*.*)|*.*|',
message => 'Escolha o arquivo',
dialog_type => OPEN_FILE,
select_file => NULL
);

-- ----------------------------------------------------------------------------------------------------
-- Sair caso nenhum arquivo tenha sido selecionado.
-- ----------------------------------------------------------------------------------------------------

IF lstr_caminhoArquivo IS NULL THEN
RETURN ;
END IF;

-- ----------------------------------------------------------------------------------------------------
-- Recebe o nome e a extensão do arquivo.
-- ----------------------------------------------------------------------------------------------------

lstr_nomeArquivo := substr(lstr_caminhoArquivo, instr(lstr_caminhoArquivo, WEBUTIL_FILE.Get_File_Separator, -1) + 1, 255);
lstr_extensaoArquivo := lower(substr(lstr_nomeArquivo, -4));

-- ----------------------------------------------------------------------------------------------------
-- Verifica se o nome do arquivo tem mais que 255 caracteres, pois não é possível fazer upload com nome
-- superior a este valor.
-- ----------------------------------------------------------------------------------------------------

IF LENGTH(lstr_nomeArquivo) > 255 THEN
alerta('Não é possível anexar arquivos com nomes maiores que 255 caracteres!');
RETURN ;
END IF;

-- ----------------------------------------------------------------------------------------------------
-- Bloqueia o envio de arquivos executáveis *.exe.
-- ----------------------------------------------------------------------------------------------------

IF lstr_extensaoArquivo = '.exe' THEN
alerta('Não é possível anexar arquivos executáveis!');
RETURN ;
END IF;

-- ----------------------------------------------------------------------------------------------------
-- Verifica qual será o ID do arquivo depois de feito seu upload.
-- ----------------------------------------------------------------------------------------------------

SELECT ARQUIVO_SEQ.NEXTVAL
INTO llng_idArquivo
FROM dual;

-- ----------------------------------------------------------------------------------------------------
-- Cria o registro no banco de dados para o arquivo, utilizando o ID obtido anteriormente. A função de
-- Upload exige que o registro já exista.
-- ----------------------------------------------------------------------------------------------------

INSERT INTO ARQUIVO (ID, NOME_MENSAGEM, NOME_ARQUIVO, ARQUIVO) VALUES (llng_idArquivo, :TRT_MENSAGENSDEEMAIL.NOME, lstr_nomeArquivo, EMPTY_BLOB());

-- ----------------------------------------------------------------------------------------------------
-- Realiza o envio do arquivo e o grava na tabela Arquivo, na coluna Arquivo que será um BLOB
-- ----------------------------------------------------------------------------------------------------

IF NOT webutil_file_transfer.Client_To_DB(clientFile => lstr_caminhoArquivo,
tableName => 'ARQUIVO',
columnName => 'ARQUIVO',
whereClause => 'ID = ' || TO_CHAR(llng_idArquivo),
asynchronous => FALSE,
callbackTrigger => NULL) THEN

alerta('Não foi possível enviar o arquivo!');
RETURN ;

END IF;

-- ----------------------------------------------------------------------------------------------------
-- Realiza o COMMIT no banco de dados e recarrega o formulário.
-- ----------------------------------------------------------------------------------------------------

do_key('commit_form');
execute_query;
alerta('Arquivo enviado com sucesso!');

EXCEPTION
WHEN OTHERS THEN

alerta('Ocorreu um erro desconhecido durante o processo de upload: ' || sqlerrm);

END;

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *