Pegar Tamanho Imagem Blob [Resolvido]

Olá,
Tenho um cadastro de clientes e nele tem a foto que é armazenada em um banco de dados em campo do tipo Blob. Devido alguns problemas, não posso usar o tipo (Imagem nome do arquivo). Só posso usar Imagem Banco de dados.
O que eu quero é antes de Inserir, o sistema verifique o tamanho dessa imagem. Apenas isso. Quero limitar a inserção de imagens maiores que 100kb, mais não posso usar o Imagem nome do Arquivo.

Me ajudem por favor, já tem uma semana que estou pesquisando.

Abraços!
Watson Passos

utiize nome de arquivo, ao submeter o formulário vc pega o tamanho do arquivo e o inseri no banco, em seguida remova o arquivo.

Olá Haroldo,
Utilizando o nome do arquivo eu consigo. Mais não posso utilizar nome do arquivo. Tenho que armazenar o Blob no banco, pois essa imagem é utilizada por outro programa em Delphi que precisa de ler esse blob para emitir um crachá. Por isso tem que ser tipo Blob no banco.

Se souber de mais alguma coisa, me ajuda ai.

Abraços!
Watson Passos

você vai usar o blob, apenas o método para salvar no blob vai ser manual, basta dar um fopen no arquivo para lê-lo e movê-lo para o campo no evento before_insert

[code]$fp = fopen($arquivo, “rb”);
$conteudo = fread($fp, $tamanho);
$conteudo = addslashes($conteudo);
fclose($fp);

$qry = “INSERT INTO arquivos VALUES
(0,”$nome","$titulo","$conteudo","$tipo")";
[/code]

Você pode fazer mais ainda, se o tamanho for superior ao desejado, converter para o tamanho desejado e salvar.

Olá Haroldo,
Em primeiro lugar, obrigado por estar me ajudando.
Mais deixa eu entender:

Eu tenho um campo do tipo Imagem do banco de dados no formulário. Ele tem um botão pra fazer o upload. A Imagem é exibida no campo. Na hora de salvar, no evento Antes de Inserir, não entendi como proceder. O meu campo {foto} foi abastecido com o binário. Preciso pegar o tamanho deste binário em kb. Como sua função poderá me ajudar, pois $arquivo ainda não foi declarado.

Obrigado pela ajuda. Se puder continuar ajudando, fico muito agradecido.

Abraços!
Watson Passos

vc usa um campo criado manualmente do tipo imagem de arquivo.
obterá o nome dele, neste campo, daí vc pega o tamanho para fazer sua verificação, e você o move para o campo blob da tabela com o código que lhe passei na onbeforinsert.

Ok, entendi.
Mais se eu usar o campo manualmente do tipo nome do arquivo, mesmo assim ele vai carregar a imagem e vai ocupar espaço no servidor, certo?
Neste caso, resolve meu caso, mais a imagem ficará no blob e também no servidor na pasta padrão de imagens do SC.
Estou certo?
Se não, pode me corrigir, sou iniciante e to aprendendo rs.

Abraços!

Por acaso não tem algum jeito de pegar o tamanho do binário que foi pra dentro do campo {logo}?

por isso eu falei para remover a imagem assim que coloca-la no banco de dados.

LENGTH() do mysql achoque traz o tamanho em bytes de uma coluna, e o mb_strlen do php acredito que também traga, mas teria que fazer teste.

Olá Haroldo,
Com sua super dica, consegui resolver usando a função mb_strlen.
No evento OnValidate do meu cadastro coloquei assim:

if ({img_pes} <> “”)
{
$tam = mb_strlen({img_pes}) / 1024;
if ($tam > 100)
{
sc_error_message(“A foto não pode ser maior do que 100 kb”);
}
}

Funcionou muito bem.

Haroldo, mais uma vez muito obrigado pela sua ajuda.

Abraços!
Watson Passos

“ISSO FICA FELIZ EM AJUDAR”.

rs.

Kkkkkm, que isso. Vc é um dos que mais ajudam aqui no forum. Vamos orar por você aqui no ES para que sempre ajuda a nós iniciantes.

Abraços!

Meu caro Watson,

Eu sou totalmente averso a coisas engessadas… hj você define 100Kb, amanhã o seu cliente quer que seja 120, 3 semanas depois ele quer 200… e por aí vai…

Eu fiz o seguinte:

a) criei uma tabela parametros (do sistema)… nessa tabela eu crio uma série de variáveis pra determinadas coisas… por exemplo: param_tam_foto (foto de funcionários), param_tam_img (imagens diversas), etc, etc.
b) no evento onBeforeInsert das tabela que vão receber os BLOBs eu coloco o script abaixo

[i]sc_lookup(data_tam,“SELECT param_tam_img FROM parametros”);
$tam_max = {data_tam[0][0]};
$tamanho = strlen({imagem_a_ser_armazenada}) / 1024; // Dividir por 1024 para ter o tamanho em KB

if ($tamanho > $tam_max )
{
$tam = (int)$tamanho;
$msg_erro = ‘Imagem excede TAMANHO MÁXIMO (’.$tam_max.‘KB).
Tamanho da imagem = ‘.$tam.’ (KB)’;
sc_error_message($msg_erro);
sc_error_exit();

}
[/i]

T+

Olá Jovito,

Boa ideia, muito obrigado. Vamos melhorar nossos códigos aqui.

Muito obrigado mais uma vez.

Ola Jovito, boa tarde

Por um acaso vc consegue ler essa imagem no banco através de algum codigo fora do SC, digo fazer uma pagina em php que faz a conexao no banco e exibe a imagem na pagina. estou com essa questão aberta no forum e não consigo solução.

http://www.netmake.com.br/forum/index.php?topic=5134.0

tem alguma ideia, pode ajudar? no link tem o codigo que estou usando.

abraço

Olá Watson eu vi que você é do ES, eu também sou, programo em Nova Venécia, se precisar de ajuda estamos ai.

Olá Robert,
Sou da Serra, Região da Grande Vitória. Estou também a disposição para ajudar no que precisar.

Abraços!
Watson Passos

Ola, sou de SP, alguém pode me ajudar…rs
alguém viu meu comentário acima…rs

abs…