PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 24 → WX - Trabalhando com Byte Array
WX - Trabalhando com Byte Array
Iniciado por adrianoboller, jun., 04 2016 1:21 AM - 4 respostas
Membro registado
3.158 mensagems
Popularité : +89 (91 votes)
Publicado em junho, 04 2016 - 1:21 AM
Prezados,

Estarei passando um exemplo aqui para ler um arquivo pdf em uma matriz de bytes.

A linguagem WL, permite fazer a leitura de um arquivo pdf.

//LENDO UM ARQUIVO PDF E SALVANDO EM DISCO
sAuxis string

sDocumentTitleis string

MyBufferis Buffer

sDocumentTitle= fExtractPath( sAux, fFileName )

MyBuffer= fLoadText( sAux )

fSaveText("TEST.PDF", myBuffer )

//TESTE O ARQUIVO GERADO: TEST.PDF




LEITURA DE BYTE ARRAY
//EXEMPLO

MyBuffer is Buffer = fLoadBuffer("TEST.PDF")

//Agora você pode cortar buffer f.i.

slice is Buffer = MyBuffer [[1 TO 8]] // leia o primeiro 8 bytes

// OR ...se preferir um array de bytes

n is int = Length(MyBuffer)

fileArr is array of n byte

FOR i = 1 TO n

fileArr[ i ] = MyBuffer[[ i ]]

END

//A variável fileArr tem o conteúdo lido.



Como pode ser visto no código, eu salvo na variável buffer para um arquivo com extensão pdf e depois que eu posso ler esse arquivo sem erros em qualquer leitor de PDF. Posso entao usar o comando Crypt para serializar o buffer em uma grande string de caracteres, letras e números e enviar via webservice. E com UnCrypt no outro lado remonto o buffer para ter o arquivo pdf e assim conseguimos fazer algo muito parecido com o Teletransporte do filme Star Trek. kkkk...





Crypt:
http://help.windev.com/en-US/…
// Encode a string in base 64
bufBase64 isbuffer = Crypt(bufToEncode, "", compressNone + cryptNone, encodeBASE64)


Uncrypt:
http://help.windev.com/en-US/…
// Declare and initialize the variables
StringToEncrypt is string = "The number of my account in Switzerland is 74538290"
Password is string = "JamesBond007"
EncryptedString is string
DecryptedString is string
// Encrypt the message
EncryptedString = Crypt(StringToEncrypt, Password, cryptSecure)
// Send the message by email for example
...
// Decrypt the message later
DecryptedString = Uncrypt(EncryptedString, Password, cryptSecure)
Info("The encrypted message meant: " + DecryptedString)


Assim eu posso usando os comandos acima enviar o buffer (byte array) com o formato de um bloco de texto para um webservice. E ainda posso fazer com que o webservice responda de volta: Arquivo PDF inválido ou válido.

Espero que o exemplo ajude a comunidade a produzir novos exemplos e novas soluções.

Forte abraço

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.158 mensagems
Popularité : +89 (91 votes)
Publicado em março, 24 2020 - 11:33 PM
Prezados

Esse assunto é muito solicitado e vou passar umas orientações adicionais

No lado do servidor na tabela de cadastro de produtos pense em ter os seguintes campos:

IdProduto
NomeProduto
ImagemGrande binário
ImagemThumbs binário
ImagemGrandeZipada binário
ImagemThumsZipada binário

Ao gravar uma imagem de um produto
Salvar a imagem com 80% no campo ImagemGrande
Salvar essa mesma imagem redimensionando para um tamanho menor para ImagemThumbs
Zipar o buffer e salvar o binário ImagemGrandeZipada
Zipar o buffer e salvar o binário ImagemThumsZipada

Quando o Webservice requisitar o produto tem as duas imagens zipadas e salvas em 80% é reduzida para Thumbs
A requisição não terá o tempo de processamento de zipar para entregar ao celular que requisitou a informação
Ao chegar no celular pelo Webservice faz a descompactacao e salvamento da informação na tabela Hfsql Classic as duas imagens

Esse procedimento agiliza o download e garante a exibição dos dados mesmo em off-line.

Espero ter ajudado com essa sugestão

Um forte abraço a todos

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.158 mensagems
Popularité : +89 (91 votes)
Publicado em abril, 10 2020 - 2:26 PM
Ou use

Bufimage is buffer = dliadbuffer( « imagem.jpg »)


ImagemString is string = encode(bufimagem, base64)

Reverso

ImagemBuff us buffer = decode(bufimagem, base64)

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.158 mensagems
Popularité : +89 (91 votes)
Publicado em abril, 27 2020 - 8:56 PM
Boa tarde...

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 :-(

OK

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.158 mensagems
Popularité : +89 (91 votes)
Publicado em abril, 28 2020 - 4:46 AM
Exemplo Download

https://depot.pcsoft.fr/resource.awp…

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/