Exemplo Upload Imagem to Database Buffer and Encode64
DOC/HELP
https://forum.PC SOFT.fr/en-US/PC SOFT.br.WINDEV/1268-trabalhando-com-byte-array-3546/read.awp
Nossos clientes as vezes mandam protocolos impressos e gostaria de digitalizar e gravar no HFSQL.
Qual seria o melhor método?
Gravar a imagem dentro do banco ou criar um link das imagem em uma pasta?
Alguém tem exemplo disso ?
Tudo depende do teu gosto as duas funcionam (base binária ou link ftp httprequest)
O campo binário do Hfsql é muito bom
Como eu faço:
- Crio uma tabela t001_pessoas E nela crio os campos Mas não coloco o binário nessa tabela da foto Crio outra tabela t002_pessoas_fotos
Relaciono e coloco o campo binário Isso não vai deixar lento vai funcionar ok e o tamanho do buffer da imagem vai para essa tabela
Funciona muito bem não diminui velocidade de consulta
Só vai transitar na rede a foto somente quando pedir ela
Se der um select *
não terei o buffer da foto transitando na rede sem motivo
Eu acho que é o mais lógico
Se for com link terá que fazer um http request além de um select
Será mais complexo, mas vai funcionar
Serão 4 operações e com a tabela binária, reservar o link numa variável e consultar com httprequest e depois um httpgettesult.
E um select com inner join 2 operação tem o resultado em um buffer ou em um array de string encode64 que terá que converter para buffer
Guardar no banco terá um consumo a mais de espaço, mas é bem simples e garantido :-)
Se for link se for ip e trocou para DNS ou para outro ip ou DNS daí o link ficou inútil, não vai baixar :-(
//Busca Foto
EDT_Foto = ""
EDT_PathArquivo = ""
sPhoto is string = ""
ImagemBuffer is Buffer = ""
bufKey is Buffer = ""
ImagemString is string = ""
sPhoto = fImageSelect(fExeDir,“”,"")
IF sPhoto ~= “” THEN
RETURN
ELSE
ImagemBuffer = fLoadBuffer(sPhoto)
//ImagemString = Crypt(ImagemBuffer,"",cryptAnsi+compressLZW,encodeBASE64)
//ImagemString = Crypt(ImagemBuffer,"",cryptFast,True)
//ImagemString = Crypt(ImagemBuffer,"",cryptNone)
ImagemString = Crypt(ImagemBuffer,"",cryptNone,encodeBASE64)
EDT_Foto = ImagemString
IMG_Foto = sPhoto
ExecuteProcess(IMG_Foto,trtChange)
END
-------
//Incluir
IF EDT_Matricula <> "" AND EDT_Nome <> "" AND EDT_Foto <> "" THEN
FotoEncode64 is string = Encode(EDT_Foto,encodeBASE64)
ok is boolean = HExecuteQuery(QRY_Insert_FotoTaxista,hQueryDefault,EDT_Matricula,EDT_Nome,EDT_Foto,FotoEncode64)
IF ok = True THEN
Info("Gravou")
ELSE
Info(ErrorInfo())
END
TableDisplay(TABLE_NG0021_FotoTaxista,taReExecuteQuery)
TableDisplay(TABLE_NG0021_FotoTaxista,taInit)
ELSE
Info("Campos obrigatorios em branco")
END
-----
//Le registro
ImagemBuffer is Buffer = ""
EDT_Matricula = TABLE_NG0021_FotoTaxista[TABLE_NG0021_FotoTaxista].COL_Matricula
EDT_Nome = TABLE_NG0021_FotoTaxista[TABLE_NG0021_FotoTaxista].COL_Nome
EDT_Foto = TABLE_NG0021_FotoTaxista[TABLE_NG0021_FotoTaxista].COL_Foto
//ImagemBuffer = Uncrypt(EDT_Foto,"", compressLZW+cryptAnsi,encodeBASE64)
//ImagemBuffer = Uncrypt(EDT_Foto,"", cryptFast,True)
//ImagemBuffer = Uncrypt(EDT_Foto,"", cryptNone)
//ImagemBuffer = Uncrypt(EDT_Foto,"1234", cryptFast)
ImagemBuffer = Uncrypt(EDT_Foto,"",cryptNone,encodeBASE64)
IMG_Foto = ImagemBuffer
ExecuteProcess(IMG_Foto,trtChange)