|
Home → WINDEV 25 → WX - Exemplo de como Serializar e Compactar Arquivo Binário para Transmitir pelo Webservice |
WX - Exemplo de como Serializar e Compactar Arquivo Binário para Transmitir pelo Webservice |
Started by BOLLER, Jun., 07 2017 4:37 PM - 7 replies |
| |
| | | |
|
| |
Registered member 3,657 messages Popularité : +175 (223 votes) |
|
Posted on June, 07 2017 - 4:37 PM |
Procedure SerializaCompactaArquivo(Token, bufArquivoBinario)
bufArquivoBinario = Crypt(bufArquivoBinario,Token,cryptAnsi,encodeBASE64)
NomeArquivoTxt is string = "Buffer"+DateSys()+TimeSys() + ".txt" NomeArquivoZip is string = "Buffer"+DateSys()+TimeSys() + "zip"
fDelete(NomeArquivoTxt) fDelete(NomeArquivoZip)
fSaveBuffer(NomeArquivoTxt,bufArquivoBinario)
NumZipErr is int
NumZipErr = zipCreate("Pacote", NomeArquivoZip)
IF NumZipErr <> 0 THEN Error(zipMsgError(NumZipErr)) END
NumZipErr = zipAddFile("Pacote", NomeArquivoTxt, zipNone)
IF NumZipErr <> 0 THEN Error(zipMsgError(NumZipErr) + "On the file " + zipCurrentFile("Pacote")) END
zipCompressionLevel("Pacote", 9)
ok is boolean
IF fFileExist(NomeArquivoZip) THEN ok = True bufArquivoBinario = fLoadBuffer(NomeArquivoZip) bufArquivoBinario = Crypt(bufArquivoBinario,Token,cryptAnsi,encodeBASE64) ELSE ok = False bufArquivoBinario = "" END
fDelete(NomeArquivoTxt) fDelete(NomeArquivoZip)
RESULT(bufArquivoBinario)
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,657 messages Popularité : +175 (223 votes) |
|
Posted on June, 07 2017 - 9:14 PM |
ENIVIAR
Procedure SerializaCompactaArquivo(Token, bufArquivoBinario)
ok is boolean
bufArquivoResultante is Variant
bufArquivoBinario = Crypt(bufArquivoBinario,Token,cryptAnsi,encodeBASE64)
NomeArquivoTxt is string = "Buffer"+DateSys()+TimeSys() + ".txt" NomeArquivoZip is string = "Buffer"+DateSys()+TimeSys() + ".zip"
ok = fDelete(NomeArquivoTxt) ok = fDelete(NomeArquivoZip)
fSaveBuffer(NomeArquivoTxt,bufArquivoBinario)
NumZipErr is int
NumZipErr = zipCreate("Pacote", NomeArquivoZip)
IF NumZipErr <> 0 THEN Error(zipMsgError(NumZipErr)) END
NumZipErr = zipAddFile("Pacote", NomeArquivoTxt, zipNone)
IF NumZipErr <> 0 THEN Error(zipMsgError(NumZipErr) + " no arquivo " + zipCurrentFile("Pacote")) END
ok = zipCompressionLevel("Pacote", 9)
ok = zipClose("Pacote")
IF fFileExist(NomeArquivoZip) THEN ok = True bufArquivoResultante = fLoadBuffer(NomeArquivoZip) bufArquivoResultante = Crypt(bufArquivoResultante,Token,cryptAnsi,encodeBASE64) ELSE ok = False bufArquivoResultante = "" END
ok = fDelete(NomeArquivoTxt) ok = fDelete(NomeArquivoZip)
nTamanhoFinal is int = Length(bufArquivoResultante)
fSaveBuffer(NomeArquivoTxt,bufArquivoResultante)
RESULT(bufArquivoResultante)
RECEBER
Procedure DeserializaDescompactaArquivo(Token is string, bufArquivoZip is Variant, Debug is boolean)
nTamanhoZip is int = Length(bufArquivoZip)
descompactado, OK is boolean
BufArquivoImage, BufArquivoTxt is Variant
ArquivoTxt is string = "Buffer"+DateSys()+TimeSys()+".txt" ArquivoZip is string = "Buffer"+DateSys()+TimeSys()+".zip"
OK = fDelete(ArquivoTxt) OK = fDelete(ArquivoZip)
bufArquivoZip = Uncrypt(bufArquivoZip,Token,cryptAnsi,encodeBASE64)
OK = fSaveBuffer(ArquivoZip,bufArquivoZip)
ResExtractAll is int ResOpenArchive is int = zipOpen("Pacote", ArquivoZip) IF ResOpenArchive = 0 THEN ArquivoTxt = zipListFile("Pacote") ResExtractAll = zipExtractAll("Pacote") IF fFileExist(ArquivoTxt) AND ResExtractAll = 0 descompactado = True ELSE descompactado = False END END IF ResOpenArchive = 0 OK = zipClose("Pacote") END
IF descompactado = True THEN BufArquivoTxt = fLoadText(ArquivoTxt,foAnsi) END
BufArquivoTxt = Uncrypt(BufArquivoTxt,Token,cryptAnsi,encodeBASE64)
BufArquivoImage = BufArquivoTxt
fDelete(ArquivoTxt) fDelete(ArquivoZip)
RESULT(BufArquivoImage)
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/Message modified, June, 07 2017 - 9:34 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 3,657 messages Popularité : +175 (223 votes) |
|
Posted on June, 08 2017 - 10:55 PM |
No Mobile seria esse codigo
Procedure ExecutaAnexosBaixar(sToken, ArquivoID, sCodigoSolicitacao, sNomeArquivo, sDegug)
BufArquivoZip, BufArquivoTxt is string
XML_Baixado is string = COL_GlobalWebservices.Ws_Consulta_AnexosBaixar(sToken, ArquivoID, sCodigoSolicitacao, sNomeArquivo, sDegug)
XmlDoc is xmlDocument XmlDoc = XMLOpen(XML_Baixado,fromString) NoXml is xmlNode FOR EACH NoXml OF XmlDoc.Xml.Retorno on NoXml T0023_Arquivo.T0023_ArquivoID = NoXml.ArquivoRecID T0023_Arquivo.T0023_SolicitacaoID = NoXml.SolicitacaoID T0023_Arquivo.T0023_NomeOriginal = NoXml.Nome_Original BufArquivoZip = NoXml.Arquivo fDelete("BufArquivo.Zip") fDelete("*.txt") BufArquivoZip = Uncrypt(BufArquivoZip,sToken,encodeBASE64) Ok = fSaveBuffer("BufArquivo.Zip",BufArquivoZip) ResExtractAll is int ResOpenArchive is int = zipOpen("Pacote", "BufArquivo.Zip") IF ResOpenArchive = 0 THEN descompactado is boolean ArquivoTxt is string = zipListFile("Pacote") ResExtractAll = zipExtractAll("Pacote") IF fFileExist(ArquivoTxt) AND ResExtractAll = 0 descompactado = True BufArquivoTxt = fLoadText(ArquivoTxt) BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,encodeBASE64) ELSE descompactado = False END END IF ResOpenArchive = 0 Ok = zipClose("Pacote") END T0023_Arquivo.T0023_Arquivo = BufArquivoTxt HAdd(T0023_Arquivo) END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,657 messages Popularité : +175 (223 votes) |
|
Posted on June, 08 2017 - 11:01 PM |
Prezados,
Caso use entre webservice e mobile a criptografia e a descriptografia é apenas assim:
Webservice
BufArquivoTxt = Crypt(BufArquivoTxt,sToken,encodeBASE64)
Mobile
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,encodeBASE64)
Obs.: E no caso de mesma plataforma tipo web e webservice pode usar outros parametros do comando crypt e uncrypt. Mas em plataformas diferentes (Web e Mobile) nao use os outros paramentros:
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,cryptAnsi,encodeBASE64)
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,cryptNone,encodeBASE64)
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,cryptFast,encodeBASE64)
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,cryptRC516,encodeBASE64)
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,cryptSecure,encodeBASE64)
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,compressNone,encodeBASE64)
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,compressShortString,encodeBASE64)
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,compressLZW,encodeBASE64)
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,657 messages Popularité : +175 (223 votes) |
|
Posted on June, 08 2017 - 11:05 PM |
//Versao Nova - Webservice
Procedure Ws_AnexosBaixar(Token, nArquivoID, nCodSolicitacao, NomeArquivoOriginal, sDebug is string)
IF sDebug="S" THEN ELSE sDebug="" END
bufMensagem is Variant = "ERRO"
bufArquivoBinario is Variant
ARQUIVORECID, SolicitacaoID, Nome_Original is string = ""
arrResultado is array of string
IF Token = TokenGlobal ok is boolean = Conexao() IF ok = True THEN IF NomeArquivoOriginal = "" bufMensagem = "ERRO: Nome nao informado do arquivo" ELSE IF (nCodSolicitacao = "" OR nCodSolicitacao = 0) AND (nArquivoID = "" OR nArquivoID = 0) bufMensagem = "ERRO: Código do nArquivoID e/ou da Solicitacao nao informado" ELSE IF (nArquivoID > 0 OR nCodSolicitacao > 0) AND (NomeArquivoOriginal <> "") dsAux is Data Source sSqlExecutar is string = [ SELECT * FROM ARQUIVO_REC (NOLOCK) ] IF nArquivoID > 0 AND nCodSolicitacao = 0 sSqlExecutar += " WHERE ARQUIVORECID = " + nArquivoID ELSE IF nArquivoID = 0 AND nCodSolicitacao > 0 sSqlExecutar += " WHERE SolicitacaoID = " + nCodSolicitacao ELSE IF nArquivoID > 0 AND nCodSolicitacao > 0 sSqlExecutar += " WHERE ARQUIVORECID = " + nArquivoID + " AND SolicitacaoID = "+ nCodSolicitacao END IF HExecuteSQLQuery(dsAux,ASPNET,hQueryWithoutCorrection, sSqlExecutar) THEN HReadFirst(dsAux) ARQUIVORECID = dsAux.ARQUIVORECID SolicitacaoID = dsAux.SolicitacaoID Nome_Original = dsAux.Nome_Original bufArquivoBinario = dsAux.Arquivo nTAMANHO is int = Length(bufArquivoBinario) bufArquivoBinario = ArquivoSerializaCompacta(TokenGlobal,bufArquivoBinario) IF Length(bufArquivoBinario) > 0 THEN bufMensagem = bufArquivoBinario ELSE bufMensagem = "ERRO: Imagem do arquivo não disponível" END ELSE bufMensagem = "ERRO: Arquivo não disponível" END
IF ok = False bufMensagem = "ERRO: "+ErrorInfo()+" "+HErrorInfo() END END ELSE bufMensagem = "ERRO: "+ErrorInfo()+" "+HErrorInfo() END ELSE bufMensagem = "ERRO: Token inválido!" END
Add(arrResultado,"<Xml><Retorno><NoXml>" + CR + ... "<ArquivoRecID>"+ ARQUIVORECID +"</ArquivoRecID>" + CR + ... "<SolicitacaoID>"+ SolicitacaoID +"</SolicitacaoID>" + CR + ... "<Nome_Original>"+ Nome_Original +"</Nome_Original>" + CR + ... "<Arquivo>"+ bufMensagem +"</Arquivo>" + CR + ... "</NoXml></Retorno></Xml>")
RESULT (arrResultado)
//Versao Nova - Webservice
Procedure Ws_ArquivoSerializaCompacta(Token, bufArquivoBinario)
ok is boolean
arrResultado is array of string
bufArquivoResultante is Variant
bufArquivoBinario = Crypt(bufArquivoBinario,Token,encodeBASE64)
NomeArquivoTxt is string = "Buffer"+DateSys()+TimeSys() + ".txt" NomeArquivoZip is string = "Buffer"+DateSys()+TimeSys() + ".zip"
ok = fDelete(NomeArquivoTxt) ok = fDelete(NomeArquivoZip)
fSaveBuffer(NomeArquivoTxt,bufArquivoBinario)
NumZipErr is int
NumZipErr = zipCreate("Pacote", NomeArquivoZip)
IF NumZipErr <> 0 THEN Error(zipMsgError(NumZipErr)) END
NumZipErr = zipAddFile("Pacote", NomeArquivoTxt, zipNone)
IF NumZipErr <> 0 THEN Error(zipMsgError(NumZipErr) + " no arquivo " + zipCurrentFile("Pacote")) END
ok = zipCompressionLevel("Pacote", 9)
ok = zipClose("Pacote")
IF fFileExist(NomeArquivoZip) THEN ok = True bufArquivoResultante = fLoadBuffer(NomeArquivoZip) bufArquivoResultante = Crypt(bufArquivoResultante,Token,encodeBASE64) ELSE ok = False bufArquivoResultante = "" END
ok = fDelete(NomeArquivoTxt) ok = fDelete(NomeArquivoZip)
nTamanhoFinal is int = Length(bufArquivoResultante)
fSaveBuffer(NomeArquivoTxt,bufArquivoResultante)
Add(arrResultado,bufArquivoResultante)
RESULT(arrResultado)
//Versao Nova - Mobile
Procedure ExecutaAnexosBaixar(sToken, ArquivoID, sCodigoSolicitacao, sNomeArquivo, sDegug)
BufArquivoZip, BufArquivoTxt is string
XML_Baixado is string = COL_GlobalWebservices.Ws_Consulta_AnexosBaixar(sToken, ArquivoID, sCodigoSolicitacao, sNomeArquivo, sDegug)
XmlDoc is xmlDocument XmlDoc = XMLOpen(XML_Baixado,fromString) NoXml is xmlNode FOR EACH NoXml OF XmlDoc.Xml.Retorno on NoXml T0023_Arquivo.T0023_ArquivoID = NoXml.ArquivoRecID T0023_Arquivo.T0023_SolicitacaoID = NoXml.SolicitacaoID T0023_Arquivo.T0023_NomeOriginal = NoXml.Nome_Original BufArquivoZip = NoXml.Arquivo fDelete("BufArquivo.Zip") fDelete("*.txt") BufArquivoZip = Uncrypt(BufArquivoZip,sToken,encodeBASE64) Ok = fSaveBuffer("BufArquivo.Zip",BufArquivoZip) ResExtractAll is int ResOpenArchive is int = zipOpen("Pacote", "BufArquivo.Zip") IF ResOpenArchive = 0 THEN descompactado is boolean ArquivoTxt is string = zipListFile("Pacote") ResExtractAll = zipExtractAll("Pacote") IF fFileExist(ArquivoTxt) AND ResExtractAll = 0 descompactado = True BufArquivoTxt = fLoadText(ArquivoTxt) BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,encodeBASE64) ELSE descompactado = False END END IF ResOpenArchive = 0 Ok = zipClose("Pacote") END T0023_Arquivo.T0023_Arquivo = BufArquivoTxt HAdd(T0023_Arquivo) END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,657 messages Popularité : +175 (223 votes) |
|
Posted on June, 08 2017 - 11:09 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 3,657 messages Popularité : +175 (223 votes) |
|
Posted on June, 09 2017 - 1:15 PM |
Procedure ExecutaAnexosBaixar(sToken, ArquivoID, sCodigoSolicitacao, sNomeArquivo, sDegug)
BufArquivoZip, BufArquivoTxt, ExtensionFile is string
XML_Baixado is string = COL_GlobalWebservices.Ws_Consulta_AnexosBaixar(sToken, ArquivoID, sCodigoSolicitacao, sNomeArquivo, sDegug)
XmlDoc is xmlDocument XmlDoc = XMLOpen(XML_Baixado,fromString) NoXml is xmlNode FOR EACH NoXml OF XmlDoc.Xml.Retorno on NoXml T0023_Arquivo.T0023_ArquivoID = NoXml.ArquivoRecID T0023_Arquivo.T0023_SolicitacaoID = NoXml.SolicitacaoID T0023_Arquivo.T0023_NomeOriginal = NoXml.Nome_Original BufArquivoZip = NoXml.Arquivo fDelete("BufArquivo.Zip") fDelete("Arquivo.*") fDelete("*.txt") BufArquivoZip = Uncrypt(BufArquivoZip,sToken,encodeBASE64) Ok = fSaveBuffer("BufArquivo.Zip",BufArquivoZip) ResExtractAll is int ResOpenArchive is int = zipOpen("Pacote", "BufArquivo.Zip") IF ResOpenArchive = 0 THEN descompactado is boolean ArquivoTxt is string = zipListFile("Pacote") ResExtractAll = zipExtractAll("Pacote") IF fFileExist(ArquivoTxt) AND ResExtractAll = 0 descompactado = True BufArquivoTxt = fLoadText(ArquivoTxt) BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,encodeBASE64) ExtensionFile = fExtractPath(T0023_Arquivo.T0023_NomeOriginal, fExtension) fSaveBuffer("Arquivo."+ExtensionFile,BufArquivoTxt) ELSE descompactado = False END END IF ResOpenArchive = 0 Ok = zipClose("Pacote") END T0023_Arquivo.T0023_Arquivo = BufArquivoTxt HAdd(T0023_Arquivo) END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,657 messages Popularité : +175 (223 votes) |
|
Posted on July, 04 2020 - 3:50 PM |
Para comprimir e descomprimir um texto use Compress e UNcompress
Veja os links abaixo
https://help.windev.com/en-US/…
https://help.windev.com/en-US/…
É bem simples, vc deve sempre retornar um array no soap para compatibilizar o webservice para terceiros se vc der result de string e nao de array somente produtos wx lê o teu webservice para o c#, java e outros poderem ler tem que ser array pega a string e add num array e coloca no result.
O zip vc pode mandar zipado uma doc ou pdf ou imagem
É bom analisar o timeout de processamento definido no WAS se tiver baixo o was mal configurado pode interromper e nao dar retorno se for muita informação.
Outra dica:
Se for uma lista de preços e de produtos vc baixa tudo na primeira veze depois só baixa o diferencial, produtos novos e alterados nao precisa baixar tudo de novo só ter nos cadastro a data de cadastro e alteração e no sql vc filtra com between usando a ultima data baixada e alterada
blz
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | | | |
| | |
|