Base de conhecimento
Encontre respostas para suas dúvidas em quatro fontes de conhecimento diferentes ao mesmo tempo, simplificando o processo de pesquisa.

Cross Segmento - TOTVS Backoffice Linha Protheus - ADVPL -Upload de arquivos via rest

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
Esse artigo foi útil?
Usuários que acharam isso útil: 0 de 0

2 Comentários

  • Avatar
    VICTOR ARAUJO VIEIRA

    Utilizamos um exemplo disponível no portal da TOTVS: 
    https://centraldeatendimento.totvs.com/hc/pt-br/articles/360020278071-MP-ADVPL-ENVIAR-ARQUIVOS-VIA-REST

    Porém ao utilizar o link em aparelhos móveis(Smartphone) obtivemos o seguinte problema: 
    -Android / Navegador Chrome - O download do arquivo coloca no final do arquivo a extensão .XML 
    -IOS / Navegador padrão- O download do arquivo coloca no final do arquivo a extensão .HTML

     

    Solução:

    Alteramos o parâmetro da função Self:SetHeader conforme abaixo:

    De: Self:SetHeader("Content-Disposition", "attachment; filename=arquivo.pdf")

    Para: Self:SetHeader("Content-type ", " inline;filename = arquivo.pdf")

     

     

     

    0
    Ações de comentário Permalink
  • Avatar
    LUCAS ALTAIR CORDOVA ARRUDA

    Só uma correção e adição na informação colocada pelo amigo VICTOR ARAUJO VIEIRA : 

    Para funcionar corretamente a impressão do pdf via browser, terá que ser da seguinte forma : 

    cArqCriado := "seuarquivo.pdf"

    Self:SetHeader("Content-Disposition", "inline; filename=\"+Alltrim(cArqCriado)+"\" )

    Self:SetContentType("application/pdf") 

    Desta forma irá funcionar perfeitamente... 

    =D 

     

     

    1
    Ações de comentário Permalink
Por favor, entre para comentar.
X Fechar

Olá ,

Há pendência referente a um de seus produtos contratados para a empresa ().

Entre em contato com o Centro de Serviços TOTVS para tratativa.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cobrança – Verificação de pendências financeiras . clique aqui.

TOTVS

X Fechar

Olá ,

Seu contato não está cadastrado no Portal do Cliente como um perfil autorizado a solicitar consultoria telefônica.

Por gentileza, acione o administrador do Portal de sua empresa para: (1)configurar o seu acesso ou (2)buscar um perfil autorizado para registro desse atendimento.

Em caso de dúvidas sobre a identificação do contato administrador do Portal, ligue (11) 4003-0015, opção 7 e, em seguida, opção 4 para buscar o suporte com o time de Assessoria ao Portal do Cliente. . clique aqui.

TOTVS

X Fechar

Olá ,

Para o atendimento de "Consultoria Telefônica" você deverá estar de acordo com o Faturamento.

TOTVS

X Fechar

Olá,

Algo inesperado ocorreu, e o usuario nao foi reconhecido ou você nao se encontra logado

Por favor realize um novo login

Em caso de dúvidas, entre em contato com o administrador do Portal de Clientes de sua empresa para verificação do seu usuário, ou Centro de Serviços TOTVS.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cadastros . clique aqui.

TOTVS

Chat _

Preencha os campos abaixo para iniciar o atendimento:

Chat _