Baixar arquivo de WebService com Base64 | Ti Responde 067

No vídeo de hoje, vamos demonstrar em como baixar arquivos em uma string Base64 (vindos principalmente em WebServices).

A dúvida de hoje foi feita pelo grande Antonio, sendo que ele perguntou qual seria a forma de baixar um arquivo através de uma string em Base64.

A partir disso foi montado esse exemplo, demonstrando em como transformar arquivos através de strings com Base64.

E abaixo o código fonte desenvolvido para exemplificar:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zVid0067
Exemplo que mostra como transformar arquivo em string base 64 e vice e versa
@type  Function
@author Atilio
@since 10/09/2022
/*/

User Function zVid0067()
    Local cTexto := ""

    //Primeiro exemplo, pegar um arquivo que existe em PDF e transformar em Base 64
    cTexto := fPdfTo64()

    //Segundo exemplo, pegar uma string base 64 e transformar em PDF
    f64toPdf(cTexto)

Return

Static Function fPdfTo64()
    Local cArquivo  := "C:\spool\zrelprod.pdf"
    Local cConteudo := ""
    Local cString64 := ""
    Local oFile

    //Se o arquivo existir
    If File(cArquivo)

        //Tenta abrir o arquivo e pegar o conteudo
		oFile := FwFileReader():New(cArquivo)
		If oFile:Open()

            //Se deu certo abrir o arquivo, pega o conteudo e transforma em base 64
			cConteudo  := oFile:FullRead()
			cString64  := Encode64(cConteudo, , .F., .F.)

            FWAlertSuccess("Arquivo pdf transformado em string com base 64", "Arquivo em Base 64")
        EndIf
        oFile:Close()
    EndIf
Return cString64

Static Function f64toPdf(cString64)
    Local cDecode := ""
    Local cPasta  := GetTempPath()
    Local cArquivo := "prod_base64_" + dToS(Date()) + "_" + StrTran(Time(), ":", "-") + ".pdf"
    Default cString64 := ""

    //Se houver string
    If ! Empty(cString64)
        //Decodifica o conteudo e salva na temporária
        cDecode := Decode64(cString64)
        MemoWrite(cPasta + cArquivo, cDecode)

        //Agora abre o arquivo
        ShellExecute("open", cArquivo, "", cPasta, 1)
    EndIf
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação