Tiempo aproximado de lectura 00:05:00 min
Duda
¿Cómo enviar un archivo mediante una solicitud REST?
Entorno
Cross Segmentos - TOTVS Backoffice (Línea Protheus) - MI - ADVPL - A partir de la versión 12.1.2210
Solución
Para devolver cualquier archivo mediante un servicio REST, simplemente lea el archivo con su clase preferida (para un mejor rendimiento, recomendamos usar la clase FwFileReader() con el método FullRead()).
Tras leerlo, envíe el archivo y el encabezado que aparece a continuación, ya que indican que el archivo se puede descargar a través del navegador (si la llamada se realiza a través del navegador).
Importante: Solo es posible manipular archivos que se encuentren dentro de la ruta raíz de Protheus.
// BIBLIOTECAS NECESARIAS
#Include "TOTVS.ch"
#Include "RESTFUL.ch"
// DECLARAÇÃO DO SERVIÇO REST
WSRESTFUL DOWNLOAD_FILE DESCRIPTION "Servicio para teste de envió de archivo."
// DECLARAÇÃO DO MÉTODO GET
WSMETHODGET DESCRIPTION"Regresa un archivo por medio del método FwFileReader()."
END WSRESTFUL
// MÉTODO GET
WSMETHOD GET WSREST DOWNLOAD_FILE
Local cFile := ""// VALORES RETORNADOS EN LA LECTURA
Local oFile := FwFileReader():New("/NR5.pdf") // RUTA 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)
0 Comentarios