Página 1 de 1

Backup em nuvem com DropBox via API

Enviado: 27 Abr 2024 09:38
por Wanderlei
Olá pessoal,
Alguém já fez o envio de arquivos para o DropBox usando a API?

tipo assim:

oHttp := CreateObject("MSXML2.ServerXMLHTTP.6.0")
oHttp:Open("POST", "https://content.dropboxapi.com/2/files/upload", .f.)
oHttp:setRequestHeader("Authorization","Bearer " + alltrim(Taux_Token) )
oHttp:setRequestHeader("Content-Type", "application/octet-stream")
oHttp:setRequestHeader("Dropbox-API-Arg", '{"path":"/codechain/extrato.pdf","mode":"add","autorename":true,"mute":false}' )
oHttp:Send(Arquivo)

Backup em nuvem com DropBox via API

Enviado: 27 Abr 2024 15:27
por LoftSide16
Sim, é possível enviar arquivos para o Dropbox usando a API. O código que você compartilhou parece estar no formato do xBase++, mas a lógica básica de envio é semelhante em várias linguagens. Certifique-se de que você tenha uma chave de API válida e que esteja autorizada para acessar o Dropbox. Além disso, verifique se o arquivo que você está enviando está sendo passado corretamente para a API. Se estiver tudo configurado corretamente, o arquivo deve ser enviado para o Dropbox com sucesso.

Backup em nuvem com DropBox via API

Enviado: 27 Abr 2024 16:57
por ivanil
Queria que as coisas fossem tão fáceis como essas respostas de IA colocam no grupo... palavras bem colocadas, mas que não levam a lugar algum..
LoftSide16 escreveu:Sim, é possível enviar arquivos para o Dropbox usando a API. O código que você compartilhou parece estar no formato do xBase++, mas a lógica básica de envio é semelhante em várias linguagens. Certifique-se de que você tenha uma chave de API válida e que esteja autorizada para acessar o Dropbox. Além disso, verifique se o arquivo que você está enviando está sendo passado corretamente para a API. Se estiver tudo configurado corretamente, o arquivo deve ser enviado para o Dropbox com sucesso.
Não poderei ajudar porque não sou usuário da plataforma; mas acredito que a melhor forma de lidar com isso é usando a sincronização do próprio equipamento.

Mas se quiser trilhar este outro caminho, veja a fonte oficial https://www.dropbox.com/developers/documentation;

Boa sorte;

Ivanil

Backup em nuvem com DropBox via API

Enviado: 29 Abr 2024 08:06
por Wanderlei
Pessoal eu tenho a chave de acesso e consigo fazer o download o que não consigo é fazer o upload porque não sei como enviar o arquivo, já tentei varias maneiras de enviar e todas sem sucesso, eu só preciso saber como colocar os dados do arquivo no corpo da mensagem, já tentei usando o memoread para ler o conteúdo, já tentei mandar como base64.
todos estes testes foi utilizando o xHarbour

Backup em nuvem com DropBox via API

Enviado: 29 Abr 2024 08:08
por Wanderlei
outro detalhe, consigo enviar arquivo texto fazendo a leitura do texto e enviando e o arquivo é criado no DropBox, só não consigo é enviar PDF e arquivo Zipado

Backup em nuvem com DropBox via API

Enviado: 29 Abr 2024 11:46
por JoséQuintas
Wanderlei escreveu:oHttp:setRequestHeader("Dropbox-API-Arg", '{"path":"/codechain/extrato.pdf","mode":"add","autorename":true,"mute":false}' )
O que estou vendo nessa linha é um nome do arquivo talvez remoto e não local.
Se fosse local seria o path completo, e não relativo.
A resposta deve estar na documentação da API.

Wanderlei escreveu:outro detalhe, consigo enviar arquivo texto fazendo a leitura do texto e enviando e o arquivo é criado no DropBox, só não consigo é enviar PDF e arquivo Zipado
Se for assim, é pesquisar como fazer o mesmo com conteúdo binário, talvez o json do harbour faça isso.

Ou talvez olhando a classe hbtip, pra ver como ela indica o formato e como converte.
Não sei se o formato gzip é traduzido automático pelo webservice, mas é usado em NFE.

Backup em nuvem com DropBox via API

Enviado: 29 Abr 2024 16:58
por Wanderlei
descobri que o formato é esse:

Backup em nuvem com DropBox via API

Enviado: 29 Abr 2024 21:18
por JoséQuintas
formato pra comunicação, e não formato do arquivo local.

Backup em nuvem com DropBox via API

Enviado: 20 Jun 2024 16:45
por Wanderlei
Pessoal caso alguém queira fazer o backup no dropBox, eu consegui fazendo assim com estas funções abaixo:

Código: Selecionar todos

********************************************************************************    
FUNCTION DropBox_UpLoad( cFile )
********************************************************************************
LOCAL cUrl := "https://content.dropboxapi.com/2/files/upload"
LOCAL cBuffer, nBytes, aBlocks, cFilePath := ''
LOCAL cPath, cFileName, cExtension, cAno := '', cMes := ''

if !InternetOK()  //Verifica se tem internet
   MsgInfo('Sem conexão com a internet','Atenção')
	Return .T.
endif

if empty(Dropbox_AccessToken)
   Return .T.
endif

if !File(cFile)    
   Return .F.
endif

Atualiza_MsgProc('Aguarde, processando o upload')

cAno := strzero(year(Date()),4)
cMes := strzero(Month(Date()),2)

DropBox_Creat_Folder( cAno )               //Cria uma pasta dentro do DropBox
DropBox_Creat_Folder( cAno + '/' + cMes )  //Cria uma sub-pasta dentro do DropBox

HB_FNameSplit( cFile, @cPath, @cFileName, @cExtension )  //Pega o nome do arquivo e a extensão

cFilePath  := cAno + '/' + cMes + '/' + cFileName + cExtension + '.base64'  //Cria um nome para o arquivo zipado
nTamanhoBk := FileSize(cFile)      //Retorna o tamanho do arquivo que irá subir
aRetorno   := DropBox_Get_SPace()  //Retorna o espaço no DropBox

if nTamanhoBk > aRetorno[3] //Compara o tamanho do Arquivo com o espaço liberado no DropBox
   
	AbrePadrao('https://www.dropbox.com')  //Abre o site do DropBox com o navegador padrão
	
	MsgInfo("Espaço insuficiente no Dropbox"+LF+;
	        "Por favor, apague alguns arquivos para liberar espaço.","Atenção")
   
	aRetorno := DropBox_Get_SPace()  //Retorna o espaço no DropBox
	
	if nTamanhoBk > aRetorno[3] //Verifica novamente se o espaço liberado é suficiente
      Msginfo('upload do arquivo falhou,espaço insuficiente.','Atenção')
		Return .f.
	endif
	
endif

TRY
	oServer:=CreateObject( "MSXML2.ServerXMLHTTP" )
	oServer:open("POST", cUrl, .F.)                        
	oServer:setRequestHeader("Authorization" , "Bearer " + Dropbox_AccessToken )
	oServer:setRequestHeader("User-Agent" , 'api-explorer-client' )
	oServer:setRequestHeader("Content-Type" , 'application/octet-stream' )
	oServer:setRequestHeader("Dropbox-API-Arg" , '{"path":"/'+cFilePath+'","mode":{".tag":"add"},"autorename":true,"mute":true,"strict_conflict":true}' )

CATCH                                                                  
   MsgInfo("Houve falha na internet!!",'Atenção')
   MsgProcFim()
   Return .t.
END

//Daqui para baixo faz a leitura do arquivo que será zipado com Base64
nFileHandle := FOpen( cFile )
nFileSize := 0

IF FError() <> 0
   Return .F.
ENDIF

nFileSize := FSeek( nFileHandle, 0, FS_END )
cStream   := Space( nFileSize )

FSeek( nFileHandle, 0, FS_SET )
FRead( nFileHandle, @cStream, nFileSize )
FClose( nFileHandle )

oServer:send( HB_Base64Encode( cStream, len(cStream) ) )  //Envia o arquivo para o DropBox

if oServer:Status == 200  //Status de retorno, 200 OK
   Msginfo('Upload do arquivo enviado com sucesso.','Atenção')
else
	if oServer:Status == 401 .or. oServer:Status == 400
	   Msginfo('Token expirado, favor renovar o Token no site do DropBox','Atenção')
      cAccessToken := ""
	   if empty(Dropbox_AppKey)
		   AbrePadrao('https://www.dropbox.com/developers/apps/')  //Abre o navegador padrão para o usuario gerar o token de acesso 
		else
		   AbrePadrao('https://www.dropbox.com/developers/apps/info/'+alltrim(Dropbox_AppKey))
		endif   

      MsgGet("Informar Access Token","Access Token", "@x", "X", @cAccessToken )  //Informa aqui o token gerado no site para continuar

		if !empty(cAccessToken)
		   //Grava o token de acesso no banco de dados
			oSql:StartTransaction()
			oSql:EXECUTE( "update param_integra set dropbox_token='"+cAccessToken+" ' ")
			oSql:Commit()
			
			Dropbox_AccessToken := cAccessToken
			
			DropBox_UpLoad( cFile )  //Envia o arquivo para o DropBox
      
		endif       

	else
		cError := Http_Error_Descricao(oServer:Status)  //Pesquisa a descrição do status retornado
		Msginfo('Falha no envio do arquivo' + LF +;
		        'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'UpLoad')
   endif
	Return .F.
endif

RETURN .T.

********************************************************************************
Function DropBox_Download( cFile,cCaminho )
********************************************************************************
*cFile    = Nome do arquivo que será baixado do DropBox
*cCaminho = Pasta dentro o DropBox onde o arquivo foi gravado
********************************************************************************
Local cUrl := 'https://content.dropboxapi.com/2/files/download'
LOCAL cPath, cFileName, cExtension

if !InternetOK()  //Verifica sem tem internet
   MsgInfo('Sem conexão com a internet','Atenção')
	Return .T.
endif

if empty(Dropbox_AccessToken)
   Return .T.
endif

Atualiza_MsgProc('Aguarde, processando o Download')

HB_FNameSplit( cFile, @cPath, @cFileName, @cExtension )  //Pega o nome do arquivo e a extensão

cFilePath := cFileName + cExtension + '.base64'  //Nome do arquivo no DropBox que subiu zipado

if !empty(cCaminho)
   cCaminho := cCaminho+'/'
endif

TRY
	oServer:=CreateObject( "MSXML2.ServerXMLHTTP" )
	oServer:open("POST", cUrl, .F.)
	oServer:setRequestHeader("User-Agent" , "api-explorer-client" )
	oServer:setRequestHeader("Authorization" , "Bearer " + Dropbox_AccessToken )
	oServer:setRequestHeader("Dropbox-API-Arg" , '{"path":"/'+cCaminho+ cFilePath + '"}' )
	oServer:send()  //Envia a solicitação
CATCH                                                                  
   MsgInfo("Houve falha na internet!!",'Atenção')
   MsgProcFim()
   Return .t.
END

MemoWrit( cFile, HB_Base64Decode( oServer:ResponseText ), .F. )  //Grava o arquivo retornado na pasta
   
MsgProcFim()

if oServer:Status != 200  //Status de retorno do site
	if oServer:Status == 401
	   Msginfo('Token expirado, favor renovar o Token no site do DropBox','Atenção')
	   AbrePadrao('https://www.dropbox.com/developers/apps/')
	else
		cError := Http_Error_Descricao(oServer:Status)  //Pesquisa a descrição do status retornado
		Msginfo('Falha no download do arquivo' + LF +;
		        'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'Download')
	   Return .F.
   endif
elseif oServer:Status == 200
   Msginfo('Download do arquivo com sucesso.'  ,'Download')
endif

Enddialog()  //Fecha a janela 

Return .T.

********************************************************************************
Function DropBox_List_Folder( cPasta,oBrowse1  )  //Lista as pastas que existe no DropBox
********************************************************************************
Local cUrl := 'https://api.dropboxapi.com/2/files/list_folder', cRetorno := '',;
      cPath, cFileName, cExtension, aRetorno := {}, aDados := {}
Local cAccessToken := space(200)

Default cPasta := ''  //Pasta dentro do DropBox, caso for vazia ele listará a pasta principal

if !InternetOK()  //Verifica se tem internet
   MsgInfo('Sem conexão com a internet','Atenção')
	Return .T.
endif

if empty(Dropbox_AccessToken)
   Return .f.
endif

Atualiza_MsgProc('Aguarde, buscando a lista de arquivos')

cBody := '{ "path": "' + if(empty(cPasta),'','/'+cPasta) + '" }'

TRY
	oServer:=CreateObject( "MSXML2.ServerXMLHTTP" )
	oServer:open("POST", cUrl, .F.)
	oServer:setRequestHeader("User-Agent" , "api-explorer-client" )
	oServer:setRequestHeader("Authorization" , "Bearer " + Dropbox_AccessToken )
	oServer:setRequestHeader("Content-Type" , 'application/json' )
	oServer:send( cBody )
CATCH                                                                  
   MsgInfo("Houve falha na internet!!",'Atenção')
   MsgProcFim()
   Return .t.
END

MsgProcFim()

if oServer:Status == 200
   oBrowse1:aArray := {}
   oBrowse1:Refresh()

	hb_jsondecode(oServer:ResponseBody, @aRetorno)  //Cria json de retorno
	For X := 1 to len(aRetorno['entries'])          //Lista as pastas
		if right(aRetorno['entries'][X]['name'],7) == '.base64'  //Aqui lista os arquivos que foram enviado com Base64
			aadd(oBrowse1:aArray , {substr(aRetorno['entries'][X]['name'],1,at('.base64',aRetorno['entries'][X]['name'])-1),;
			              dtoc(stod(charrem('-',left(aRetorno['entries'][X]['client_modified'],10))))+substr(aRetorno['entries'][X]['client_modified'],11),;
							  aRetorno['entries'][X]['size'],cPasta})
	   else
			aadd(oBrowse1:aArray , {aRetorno['entries'][X]['name'],;  //Aqui lista as pastas
			              '',;
							  0,cPasta})
		endif
	Next
	
else

	if oServer:Status == 401
	   Msginfo('Token expirado, favor renovar o Token no site do DropBox','Atenção')
	   if empty(Dropbox_AppKey)
		   AbrePadrao('https://www.dropbox.com/developers/apps/')
		else
		   AbrePadrao('https://www.dropbox.com/developers/apps/info/'+alltrim(Dropbox_AppKey))
		endif   

      MsgGet("Informar Access Token","Access Token", "@x", "X", @cAccessToken )

		if !empty(cAccessToken)
			oSql:StartTransaction()
			oSql:EXECUTE( "update param_integra set dropbox_token='"+cAccessToken+" ' ")
			oSql:Commit()
			Dropbox_AccessToken := cAccessToken
      endif       
	else
		cError := Http_Error_Descricao(oServer:Status)  //Pesquisa a descrição do status retornado
      if oServer:Status == 409
			Msginfo('Falha ao listar a pasta'  + LF +;
			        'Nenhum arquivo encontrado'+ LF +;
					  'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'List Folder')
	   else
			Msginfo('Falha ao listar a pasta' + LF +;
			        'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'List Folder')
		endif

   endif

	Return .f.
endif

Return .t.

********************************************************************************
Function Seleciona_Arquivo()
********************************************************************************
LOCAL oDlg, oShape[2], oLbTitulo, oLbRodape, oButtonex[3], oBrowse1, cRetorno := ''
LOCAL oCombo[2],vCombo[2],oLabel[2],aDados := {} ,aAno := {},aMes := {}

for x:= 2023 to YEAR(Date())
   aadd(aAno,alltrim(str(x)))
next
AADD(aMes, 'Janeiro'  )
AADD(aMes, 'Fevereiro')
AADD(aMes, 'Março'    )
AADD(aMes, 'Abril'    )
AADD(aMes, 'Maio'     )
AADD(aMes, 'Junho'    )
AADD(aMes, 'Julho'    )
AADD(aMes, 'Agosto'   )
AADD(aMes, 'Setembro' )
AADD(aMes, 'Outubro'  )
AADD(aMes, 'Novembro' )
AADD(aMes, 'Dezembro' )

vCombo[1] := ascan(aAno,alltrim(str( YEAR(Date() ))))
vCombo[2] := Month( Date() )

INIT DIALOG oDlg TITLE "" ICON oIcon AT 0, 0 SIZE 819,526 CLIPPER  NOEXIT  ;
   STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+DS_CENTER 

   @ -3,-3 SHAPE oShape[1] SIZE 841,75 ;
        BACKCOLOR nCorFundo ; 
        CURVATURE 0 BORDERSTYLE 0 FILLSTYLE 10
	
	@ 5,10 SAY oLbTitulo CAPTION "Lista dos Arquivos" /*+ if(empty(cPasta),'',' da pasta ' + cPasta) */ SIZE 707,53 ;
        STYLE DT_VCENTER+DT_SINGLELINE;
        COLOR nCorLetra BACKCOLOR nCorFundo  ;
        FONT HFont():Add( 'Arial',0,-35,400,,,)

   @ 22,81 SAY oLabel[1] CAPTION "Ano"  SIZE 29,22  
   @ 52,80 GET COMBOBOX oCombo[1] VAR vCombo[1] ;
        ITEMS aAno  ;
        SIZE 110,24  

   @ 173,81 SAY oLabel[2] CAPTION "Mês"  SIZE 31,21  
   @ 205,79 GET COMBOBOX oCombo[2] VAR vCombo[2] ;
        ITEMS aMes ;
        SIZE 110,24  

   @ 324,74 BUTTONEX oButtonex[3] CAPTION "Pesquisar"   SIZE 89,32 ;
        STYLE BS_CENTER +WS_TABSTOP  ;
        ON CLICK {|| DropBox_List_Folder(aAno[vCombo[1]]+'/'+strzero(vCombo[2],2) ,@oBrowse1 ),oBrowse1:Refresh() }

   @ 6,120 BROWSE oBrowse1 ARRAY SIZE 806,266 STYLE WS_TABSTOP      

		oBrowse1:aArray    := aDados
		oBrowse1:bColorSel := nCorFundo
		oBrowse1:AddColumn( HColumn():New('Arquivo', ColumnArBlock() ,'C',50, 0 ,.F.,1,0,'@!',,,,,,,,,))
		oBrowse1:AddColumn( HColumn():New('Data'   , ColumnArBlock() ,'C',20, 0 ,.F.,1,1,'@!',,,,,,,,,))
		oBrowse1:AddColumn( HColumn():New('Tamanho', ColumnArBlock() ,'N',10, 0 ,.F.,1,1,'9999999999',,,,,,,,,))

   @ -3,455 SHAPE oShape[2] SIZE 841,75 ;
        BACKCOLOR nCorFundo ; 
        CURVATURE 0 BORDERSTYLE 0 FILLSTYLE 10
   
   @ 5,466 SAY oLbRodape CAPTION "Selecione um arquivo"  SIZE 583,53 ;
        STYLE DT_VCENTER+DT_SINGLELINE;
         COLOR nCorLetra  BACKCOLOR nCorFundo  ;
        FONT HFont():Add( 'Arial',0,-24,400,,,)

   @ 605,473 BUTTONEX oButtonex[1] CAPTION "&Seleciona"   SIZE 98,32 ;
        STYLE BS_CENTER +WS_TABSTOP  ;
        ON CLICK {|| if(len(oBrowse1:aArray) <= 0,.t. , DropBox_Download(alltrim(oBrowse1:aArray[oBrowse1:nCurrent][1]),oBrowse1:aArray[oBrowse1:nCurrent][4])) }

   @ 708,473 BUTTONEX oButtonex[2] CAPTION "C&ancela"   SIZE 98,32 ;
        STYLE BS_CENTER +WS_TABSTOP  ;
        ON CLICK {|| Enddialog() }

ACTIVATE DIALOG oDlg 

Return cRetorno

********************************************************************************
Function DropBox_Creat_Folder( cPasta )  //Cria pastas no DropBox
********************************************************************************
Local cUrl := 'https://api.dropboxapi.com/2/files/create_folder_v2'

if !InternetOK()
   MsgInfo('Sem conexão com a internet','Atenção')
	Return .T.
endif

if empty( Dropbox_AccessToken ) .or.;
   empty( cPasta )
   Return .T.
endif

Atualiza_MsgProc('Aguarde, Criando a pasta no DropBox')

cPath := '{ "path": "/' + alltrim(cPasta) + '" }'

TRY
	oServer:=CreateObject( "MSXML2.ServerXMLHTTP" )
	oServer:open("POST", cUrl, .F.)
	oServer:setRequestHeader("User-Agent" , "Datarey" )
	oServer:setRequestHeader("Authorization" , "Bearer " + Dropbox_AccessToken )
	oServer:setRequestHeader("Content-Type" , 'application/json' )
	oServer:send(cPath)
CATCH                                                                  
   MsgInfo("Houve falha na internet!!",'Atenção')
   MsgProcFim()
   Return .t.
END

MsgProcFim()

if oServer:Status == 200
   //Msginfo('Pasta criada com sucesso','Atenção')
else   
	//cError := Http_Error_Descricao(oServer:Status)  //Pesquisa a descrição do status retornado
   //Msginfo('Falha na consulta' + LF +;
	//        'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'Atenção')
	//Return .F.
endif

Return .T.

********************************************************************************
Function DropBox_Get_SPace()  //Retorna a Capacidade de armazenamento e espaço ocupado
********************************************************************************
Local cUrl := 'https://api.dropboxapi.com/2/users/get_space_usage',;
      aRetorno[3]

aRetorno[1] := 0 //Capacidade total de armazenamento
aRetorno[2] := 0 //Espaço já utilizado
aRetorno[3] := 0 //Espaço ainda Disponivel

if !InternetOK()
   MsgInfo('Sem conexão com a internet','Atenção')
	Return aRetorno
endif

if empty( Dropbox_AccessToken )  
   Return aRetorno
endif

Atualiza_MsgProc('Aguarde, Consultando a capacidade no DropBox')

TRY
	oServer:=CreateObject( "MSXML2.ServerXMLHTTP" )
	oServer:open("POST", cUrl, .F.)
	oServer:setRequestHeader("User-Agent" , "Datarey" )
	oServer:setRequestHeader("Authorization" , "Bearer " + Dropbox_AccessToken )
	oServer:setRequestHeader("Content-Type" , 'application/json' )
	oServer:send('null')
CATCH                                                                  
   MsgInfo("Houve falha na internet!!",'Atenção')
   MsgProcFim()
   Return aRetorno
END

MsgProcFim()

if oServer:Status == 200
	aRetorno_cons := {}
	hb_jsondecode(oServer:ResponseBody, @aRetorno_cons)
	aRetorno[1] := aRetorno_cons['allocation']['allocated']
	aRetorno[2] := aRetorno_cons['used']
	aRetorno[3] := aRetorno[1] - aRetorno[2]
else   
	if oServer:Status == 401
	   Msginfo('Token expirado, favor renovar o Token no site do DropBox','Atenção')

      cAccessToken := ""
	   if empty(Dropbox_AppKey)
		   AbrePadrao('https://www.dropbox.com/developers/apps/')
		else
		   AbrePadrao('https://www.dropbox.com/developers/apps/info/'+alltrim(Dropbox_AppKey))
		endif   

      MsgGet("Informar Access Token","Access Token", "@x", "X", @cAccessToken )

		if !empty(cAccessToken)
			oSql:StartTransaction()
			oSql:EXECUTE( "update param_integra set dropbox_token='"+cAccessToken+" ' ")
			oSql:Commit()
			Dropbox_AccessToken := cAccessToken
      endif       

	else
		cError := Http_Error_Descricao(oServer:Status)  //Pesquisa a descrição do status retornado
	   Msginfo('Falha na consulta da capacidade' + LF +;
		        'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'Get_Space')
   endif
	Return aRetorno
endif

Return aRetorno

********************************************************************************
Function DropBox_Get_Current_Account()  //Lista os dados da conta logada
********************************************************************************
Local cUrl := 'https://api.dropboxapi.com/2/users/get_current_account',;
      cNome := '', cEmail := ''

if !InternetOK()
   MsgInfo('Sem conexão com a internet','Atenção')
	Return .T.
endif

if empty( Dropbox_AccessToken )
   Return .T.
endif

Atualiza_MsgProc('Aguarde, Consultando a capacidade no DropBox')

TRY
	oServer:=CreateObject( "MSXML2.ServerXMLHTTP" )
	oServer:open("POST", cUrl, .F.)
	oServer:setRequestHeader("User-Agent" , "Datarey" )
	oServer:setRequestHeader("Authorization" , "Bearer " + Dropbox_AccessToken )
	oServer:setRequestHeader("Content-Type" , 'application/json' )
	oServer:send('null')
CATCH                                                                  
   MsgInfo("Houve falha na internet!!",'Atenção')
	MsgProcFim()
   Return .t.
END

MsgProcFim()

if oServer:Status == 200
	aRetorno_cons := {}
	hb_jsondecode(oServer:ResponseBody, @aRetorno_cons)
	cName  := aRetorno_cons['name']['display_name']
	cEmail := aRetorno_cons['email']
	Msginfo('Nome: ' + cName + LF +;
	        'E-mail: ' + cEmail,'Atenção')
else   
	if oServer:Status == 401
	   Msginfo('Token expirado, favor renovar o Token no site do DropBox','Atenção')
	   AbrePadrao('https://www.dropbox.com/developers/apps/')
	else
		cError := Http_Error_Descricao(oServer:Status)  //Pesquisa a descrição do status retornado
	   Msginfo('Falha na consulta do usuário logado' + LF +;
		        'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'Atenção')
	endif
	Return .F.
endif

Return .T.

Backup em nuvem com DropBox via API

Enviado: 20 Jun 2024 16:47
por Wanderlei
Funciona o Upload e download, o único detalhe é que o usuário tem que gerar o token dentro do DropBox porque ele vence e ainda não consegui gerar por dentro do sistema.