Validando extensão do arquivo de upload - *** Resolvido ***

Fala Pessoal, segue minha dúvida.

Montei um formulário com um campo para upload de arquivo do tipo: documento (nome do arquivo) onde configurei certo e está funcionando o upload, porém botei uma validação em php para checar a extensão do arquivo e me retornar true (extensão ok) ou false (extensão não permitida).

O que ocorre é que já testei essa validação tanto no onValidate e no BeforeInsert e mesmo que a validação dê false (extensão não permitida) o upload chega a ser feito, mesmo tentando esvaziar a variavel {arquivo}.

Na validação false segue o código que achei que iria funcionar mas ele faz o upload.

//erro de validacao /** * Display an error message */ {arquivo}=''; //esvazia o arquivo // Error parameters $error_message = 'Apenas arquivos com extensão .doc, .docx e .pdf são aceitos.'; // Error message sc_error_message($error_message);

Minha dúvida também é, o scriptcase não tem configuração para já fazer essa validação?

Versão do meu SC: 5.02.0041

Muito obrigado.

com javascript ou jquery você consegue validar antes, com php só usando o ajax para enviar o nome do arquivo antes de submeter o formulário e validar a extensão.

Obrigado Haroldo.

Mas continuo meio travado com isso pois seguindo a sua dica eu criei a função em javascript dentro dos Métodos Javascript.

Essa função me retorna true (arquivo com extensão válida) ou false (arquivo com extensão falsa).

Eu chamo essa função via sc_ajax_javascript(‘nomeMetodoJavascript’, array(“parâmetro”)); no onValidate.

Mas como eu posso obter o retorno do javascript para então continuar o código no php?

Testei receber por uma variavel pega_retorno mas parece que não traz o retorno.

[param_arquivo]={arquivo}; $pega_retorno = sc_ajax_javascript('valida_extensao', array("param_arquivo")); if($pega_retorno==true) { //validou }else{ //não validou }

Tem alguma dica de como posso obter o retorno do javascript?

Obrigado

com ajax.

Deve enviar o nome do arquivo via ajax para o php, no php vc salva uma sessão com esse nome de arquivo, aí antes de submeter você verifica a extensão.

Veja, bem, estou usando teorias, não tenha nada na prática para garantir o que estou sugerindo aqui.

Uma dificuldade é em achar um evento ajax que pegue o momento que o usuário anexou o arquivo no sistema mas ainda não foi enviado para o servidor; seria o ponto certo para fazer a checagem.

O problema é que o upload do SC é muito loco, na hora que você seleciona o arquivo ele já faz o upload pra pasta temp depois ele move o arquivo para o diretório informado ao submeter o formulário.

Eu desisti de usar o SC pra upload, estou usando o Fancyupload, ele é ótimo, embora eu tenha que tratar tudo na mão desde a inserção dos nomes dos arquivos nas tabelas do banco.

Coloquei o fancyupload em uma aplicação blank e foi de boa.

Uso esta rotina no OnBeforeInsert e OnBeforeUpdate para validar a extensão do arquivo.

$mime = trim(mime_content_type('/var/www/scriptcase/file/doc/documentos/'.{ds_nome_arquivo}). "\n");

if($mime == 'application/msword' OR $mime == 'application/pdf')
{
	//rotina
}
else
{
	sc_error_message("Este tipo de arquivo " . $mime . " não é permitido!");
}

Porém o arquivo já se encontra no servidor, você pode utilizar uma rotina para excluir o arquivo se o mesmo não for permitido.

mas aí ele já fez o upload.

Exato, chega a ser mais vantajoso usar um upload externo pois dentro do SC tem muita coisa para configurar e você fica sem controle pois o upload vai pro servidor mesmo antes do submit do formulário como você disse, pro tmp e pra pasta.

Ficaria ridículo fazer um controle para excluir isso do tmp e pasta do usuário pois não era nem para subir.

Ainda mais com arquivos muito grandes.

O tamanho do arquivo acho que dá para controlar, em Aplicação > Configuração se não me engano tem um campo lá.

sim, mas só depois do upload, não antes.

Bom, pelo visto o upload do SC está abandonado.
Na versão 6 continua na mesma, alguém sabe?

A mesma porcaria.
Eu simplesmente não entendo como eles liberaram a aplicação calendário e esse upload fajuto. Não servem para nada!
Pagamos por recursos que não funcionam adequadamente.

Prezados.

Na versão 600.025 que liberamos, criamos esta opção já automatica.

Nos campos Imagens e documentos existe uma opção “Extensões permitidas”, com o objetivo de validar as imagens conforme configuradas.

Descrição: Extensões permitidas para upload, separadas por ponto e virgula(;). Caso seja deixado em branco, todas as extensões serão permitidas. Ex.: docx;jpg;png;xls

Agradeçemos ao contato.

Interessante, abandonarei meu código :slight_smile:

Se esta estiver verificando antes do upload

Prezados,

A verificação é feita quando o formulario é submetido (Insert ou Update).

Então é após o upload.

Pelo que entendi a questão aqui é criticar antes do upload.