Dúvida
Como enviar um arquivo por meio de uma requisição REST?
Ambiente
Cross Segmento - TOTVS Backoffice (Linha Protheus) – ADVPL – A partir da versão 12.1.17
Solução
Para retornar qualquer arquivo via serviço REST basta ler o arquivo com a classe de sua preferência (por performance indicamos a utilização da classe FwFileReader() utilizando o método FullRead()).
Após a leitura envie o arquivo e o cabeçalho abaixo, pois eles indicam que o download do arquivo pode ser realizado pelo navegador (caso a chamada ocorra por meio do mesmo).
Importante: Somente é possível manipular arquivos abaixo do RootPath do Protheus.
Exemplo
// BIBLIOTECAS NECESSÁRIAS
#Include "TOTVS.ch"
#Include "RESTFUL.ch"
// DECLARAÇÃO DO SERVIÇO REST
WSRESTFUL DOWNLOAD_FILE DESCRIPTION "Serviço para teste de envio de arquivo."
// DECLARAÇÃO DO MÉTODO GET
WSMETHODGET DESCRIPTION"Retorna um arquivo por meio do método FwFileReader()."
END WSRESTFUL
// MÉTODO GET
WSMETHOD GET WSREST DOWNLOAD_FILE
Local cFile := ""// VALORES RETORNADOS NA LEITURA
Local oFile := FwFileReader():New("/NR5.pdf") // CAMINHO ABAIXO DO ROOTPATH
// SE FOR POSSÍVEL ABRIR O ARQUIVO, LEIA-O
// SE NÃO, EXIBA O ERRO DE ABERTURA
If (oFile:Open())
cFile := oFile:FullRead() // EFETUA A LEITURA DO ARQUIVO
// RETORNA O ARQUIVO PARA DOWNLOAD
Self:SetHeader("Content-Disposition", "attachment; filename=NR5.pdf")
Self:SetResponse(cFile)
lSuccess := .T. // CONTROLE DE SUCESSO DA REQUISIÇÃO
Else
SetRestFault(002, "can't load file") // GERA MENSAGEM DE ERRO CUSTOMIZADA
lSuccess := .F. // CONTROLE DE SUCESSO DA REQUISIÇÃO
EndIf
Return (lSuccess)
Saiba mais
REST ADVPL
FWFILEREADER
Download de arquivo via Rest
2 Comentários