Power Builder - Problemas al tratar de subir archivos a DropBox

 
Vista:
Imágen de perfil de Adolfo
Val: 248
Bronce
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Problemas al tratar de subir archivos a DropBox

Publicado por Adolfo (150 intervenciones) el 19/05/2020 15:19:59
Alguien ya pudo hacer esto:

Utilizar DropBox para subir archivos desde PB, vi este video:
pero no puedo ni siquiera logearme, me marca error de bad request

Error

Este es el código que utilizo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Integer li_rc
String ls_body, ls_json
Long ll_root, ll_item
Blob lb_json
OAuthClient	     lo_client
OAuthRequest     loa_request
ResourceResponse lrr_response
JSONGenerator    ljg_json
 
ljg_json = CREATE JSONGenerator
ll_root  = ljg_json.CreateJSONObject()
ll_item  = ljg_json.AddItemString(ll_root,"path",par_path)
ls_json  = ljg_json.GetJSONString()
lb_json  = Blob(ls_json,encodingUTF8!)
 
lo_client          = CREATE OAuthClient
loa_request.Method = "POST"
 
loa_request.SetHeader("User-Agent","RevueltaSIP")
loa_request.SetHeader("Accept","application/json")
loa_request.SetHeader("Contet-Type","application/json")
loa_request.SetAccessToken(sle_token.text)
loa_request.URL = "https://api.dropboxapi.com/2/files/list_folder"
loa_request.SetBody(lb_json)
li_rc = lo_Client.RequestResource(loa_request,lrr_response)
if li_rc = 1 then
	li_rc = lrr_response.GetStatusCode()
	if li_rc = 200 then
		lrr_response.GetBody(par_body)
		lrr_response.GetHeader(par_header)
	else
		li_rc = -1
	end if
end if
if li_rc = -1 then
	par_body = "Error - Status code: " + String(lrr_response.GetStatusCode()) + " " + lrr_response.GetStatusText() + "~r~n" + lrr_response.GetHeaders()
end if
 
Return li_rc
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problemas al tratar de subir archivos a DropBox

Publicado por Bunker (83 intervenciones) el 19/05/2020 19:25:01
Adolfo

lamentablemente no llegue a probarlo
expiro las Ver 2019 R2 y todavia no encuentro
la Receta para medicarlo

Se ve muy bueno todas las APIS

Si sabes algo respecto a que medicina se debe dar se agradece

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Adolfo
Val: 248
Bronce
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Problemas al tratar de subir archivos a DropBox

Publicado por Adolfo (150 intervenciones) el 21/05/2020 18:30:10
Ya lo resolví:

Funcionando

Este es el código para consultar la lista de archivos en la cuenta:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
String ls_body, ls_json, ls_cursor, ls_hasmore, ls_row, ls_car, ls_tag, ls_nombre, ls_fec1, ls_fec2, ls_tam, ls_more, ls_id
ULong ll_root, ll_i, ll_j, ll_tam
Integer li_i
Blob lb_json
JSONGenerator ljg_json
OAuthClient	lo_client
OAuthRequest loa_request
ResourceResponse lrr_response
 
ljg_json = CREATE JSONGenerator
ll_root  = ljg_json.CreateJSONObject()
 
ljg_json.AddItemString(ll_root,"path","")
ls_json = ljg_json.GetJSONString()
lb_json = Blob(ls_json,encodingUTF8!)
loa_request.SetBody(lb_json)
 
loa_request.Method = "POST"
loa_request.SetAccessToken(sle_token.text)
loa_request.SetHeader("Content-Type","application/json")
loa_request.URL = "https://api.dropboxapi.com/2/files/list_folder"
lo_client = CREATE OAuthClient
if lo_client.RequestResource(loa_request,lrr_response) = 1 then
	lrr_response.GetBody(ls_body)
else
	mle_resultado.text = "~r~n" + "Error - Status code: " + String(lrr_response.GetStatusCode()) + " " + lrr_response.GetStatusText()
	Return
end if
 
if lo_client.RequestResource(loa_request,lrr_response) = -1 then
	mle_resultado.text = "~r~n" + "Error - Status code: " + String(lrr_response.GetStatusCode()) + " " + lrr_response.GetStatusText()
	Return
end if
 
lrr_response.GetBody(ls_body)
dw_archivos.reset()
ls_body = Mid(ls_body,2)
ls_body = Left(ls_body,Len(ls_body) - 1)
ls_body = ReempChar(ls_body,'"','')  //Esta función reemplaza un caracter por otro en toda la cadena
ls_body = ReempChar(ls_body,' ','')
 
ll_i = Pos(ls_body,"has_more")       //si has_more vale true hay mas archivos a recuperar
if ll_i > 0 then                     //se debe utilizar la api: https://api.dropboxapi.com/2/files/list_folder/continue
	ls_hasmore = Mid(ls_body,ll_i)    //y pasar cursor como parametro para recuperar mas archivos
	ls_hasmore = entry(ls_hasmore,2,':')
	ls_more    = ls_hasmore
	ll_i       = ll_i - 2
	ls_body    = Left(ls_body,ll_i)
	ll_i       = Pos(ls_body,"cursor")
	if ll_i > 0 then
		ls_cursor = Mid(ls_body,ll_i)
		ls_cursor = entry(ls_cursor,2,':')
		ll_i      = ll_i - 1
		ls_body   = Left(ls_body,ll_i)
	end if
end if
if Right(ls_body,1) = "," then ls_body = Left(ls_body, Len(ls_body) - 1)
 
ll_j = Len(ls_body)
for ll_i = 1 to ll_j
	ls_car = Mid(ls_body,ll_i,1)
	Choose Case ls_car
		Case '{'
			ls_row = ''
		Case '}'
			ls_tag	 = entry(ls_row,1,',')
			ls_tag    = entry(ls_tag,2,':')
			ls_nombre = entry(ls_row,2,',')
			ls_nombre = entry(ls_nombre,2,':')
			ls_id     = entry(ls_row,5,',')
			ls_id     = "id:"+entry(ls_id,3,':')
			ls_fec1   = entry(ls_row,6,',')
			ls_fec1   = Mid(ls_fec1,17)
			ls_fec2   = entry(ls_row,7,',')
			ls_fec2   = Mid(ls_fec2,17)
			ls_tam	 = entry(ls_row,9,',')
			ls_tam	 = entry(ls_tam,2,':')
			ll_tam    = Long(ls_tam)
			li_i = dw_archivos.rowcount() + 1
			dw_archivos.insertrow(li_i)
			dw_archivos.setitem(li_i,"tag",ls_tag)
			dw_archivos.setitem(li_i,"nombre",ls_nombre)
			dw_archivos.setitem(li_i,"fech1",ls_fec1)
			dw_archivos.setitem(li_i,"fech2",ls_fec2)
			dw_archivos.setitem(li_i,"tam",ll_tam)
			dw_archivos.setitem(li_i,"id",ls_id)
		Case Else
			ls_row += ls_car
	End Choose
next

Este es el codigo para subir un archivo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
String ls_archivo, ls_completo, ls_path
Integer ll_rc, li_rtn
OAuthClient lo_client
OAuthRequest loa_request
ResourceResponse lrr_response
Blob lb_data
 
li_rtn = GetFileOpenName("Seleccione archivo", ls_completo, ls_archivo, "*", "Archivo (*.*", GetCurrentDirectory())
if li_rtn < 1 then return
 
ls_path = '{"path":"/'+ls_archivo+'"}'
ll_rc = FileOPen(ls_completo,StreamMode!)
if ll_rc > 0 then
	ll_rc = FileReadEx(ll_rc,lb_data)
else
	mle_resultado.text = "Error al intentar abrir el archivo"
	Return
end if
 
lo_client          = CREATE OAuthClient
loa_request.Method = "POST"
loa_request.SetHeader("Content-Type","application/octet-stream")
loa_request.SetHeader("Dropbox-API-Arg",ls_path)
loa_request.SetAccessToken(sle_token.text)
loa_request.URL = "https://content.dropboxapi.com/2/files/upload"
loa_request.SetBody(lb_data)
ll_rc = lo_Client.RequestResource(loa_request,lrr_response)
if ll_rc = 1 then
	lrr_response.GetBody(mle_resultado.text)
else
	mle_resultado.text = "Error - " + lrr_response.GetStatusText()
end if
 
cb_consultar.event clicked()

Este es el codigo para descargar un archivo seleccionado en la DW:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
String ls_path, ls_archivo, ls_arg
Long ll_rc, ll_row
Blob lb_archivo
OAuthClient lo_client
OAuthRequest loa_request
ResourceResponse lrr_response
 
ll_row = dw_archivos.GetSelectedRow(0)
if ll_row = 0 then
	MessageBox("Error","Debe seleccionar un archivo para descargar",StopSign!)
	Return
end if
ls_path = GetCurrentDirectory()
if GetFolder("Seleccione carpeta destino", ls_path) <> 1 then Return
ls_path += "\"
 
ls_archivo         = dw_archivos.GetItemString(ll_row,"id")
ls_arg             = '{"path":"'+ls_archivo+'"}'
lo_client          = CREATE OAuthClient
loa_request.Method = "POST"
loa_request.URL    = "https://content.dropboxapi.com/2/files/download"
loa_request.SetHeader("Content-Type","application/octet-stream")
loa_request.SetHeader("Dropbox-API-Arg",ls_arg)
loa_request.SetAccessToken(sle_token.text)
ll_rc = lo_Client.RequestResource(loa_request,lrr_response)
if ll_rc = 1 then
	lrr_response.GetBody(lb_archivo)
	if lrr_response.GetStatusCode() = 200 then
		mle_resultado.text = "Archivo descargado:"
		ls_archivo = ls_path + dw_archivos.GetItemString(ll_row,"nombre")
		ll_rc = FileOpen(ls_archivo,StreamMode!,Write!,LockWrite!,Replace!,EncodingANSI!)
		FileWriteEx(ll_rc,lb_archivo)
		FileClose(ll_rc)
	else
		mle_resultado.text += "~r~n" + lrr_response.GetStatusText()
	end if
else
	mle_resultado.tex
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas al tratar de subir archivos a DropBox

Publicado por titosoft.peru@gmail.com (14 intervenciones) el 09/06/2020 02:30:06
Hola:

Y en que version de PB te ha funcionado. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Adolfo
Val: 248
Bronce
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Problemas al tratar de subir archivos a DropBox

Publicado por Adolfo (150 intervenciones) el 09/06/2020 15:01:28
PB 2019 R2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar