** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Subir archivos por vba a la nube con dropbox
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoSubir archivos por vba a la nube con dropbox

 Responder Responder Página  12>
Autor
Mensaje Invertir el orden de clasificación
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2003
Enlace directo a este mensaje Tema: Subir archivos por vba a la nube con dropbox
    Enviado: 18/Mayo/2019 a las 17:47
Cerrar el hilo por favor

Saludos
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2003
Enlace directo a este mensaje Enviado: 12/Mayo/2019 a las 10:32
Hola

Lo he probado en el trabajo en 3 bases de datos y funciona perfectamente, la verdad que es una gozada hacer copias de seguridad asi. O para subir a Dropbox lo que quieras.
Con este codigo estas limitado en teoria a 150 mb, pero modificandolo se podria subir archivos mas grandes.

Como resumen

https://www.dropbox.com/developers-v1/core/docs

https://www.dropbox.com/developers

https://dropbox.github.io/dropbox-api-v2-explorer/#files_upload

https://www.dropbox.com/developers/documentation/http/documentation

http://www.jose.it-berater.org/winhttp/settimeouts_method.htm

Y un ejemplo con varias opciones
https://www.dropbox.com/s/dda5vkcbw2hal2m/ArchivosNube.rar?dl=0

Son 3 parametros los que hay que pasar, el token de dropbox, la ruta dropbox con archivo y extension, y ruta del archivo a subir con archivo y extension.


Se puede cerra, muchas gracias a todos.



Editado por rokoko - 12/Mayo/2019 a las 10:34
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 2992
Enlace directo a este mensaje Enviado: 10/Mayo/2019 a las 14:36
CUando se utiliza en modo asincrono, hay que agregar luego de la linea send:
obj.waitForResponse
https://tucondominioaldia.net
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2003
Enlace directo a este mensaje Enviado: 10/Mayo/2019 a las 08:13
Publicado originalmente por guarracuco guarracuco escribió:

Quizas sea suficiente el cambiar el parametro false por true.
Esto indica que la solicitud se haga en modo asincrono de manera que no se detiene la ejecucion de codigo vba. Podrias colocar un reloj indicando que el proceso se esta ejecutando.
Hay un evento que te indica que el proceso finalizo. Utilizalo para detener el reloj.


He cambiado el parametro false a true en esta linea  req.Open "POST", "https://content.dropboxapi.com/2/files/upload", True   pero me suelta el error  "El dato necesario para completar esta operacion no esta disponible ahora"


Publicado originalmente por pitxiku pitxiku escribió:

Entiendo que los tiempos que has puesto son más que suficientes (son casi 3 horas).

Menos el tiempo del envío del archivo(send), para los demás con un par de segundos debe sobrar.

Si el archivo no pasa de 150 mb no pasa nada. Pero si pasa, entiendo que sí debes usar una sesión.

Pues si no pongo en todos parametro (3 ultimos) un tiempo generoso  me dice que se ha agotado el tiempo.


Mañana lo probare ya en realidad en el trabajo, y ya os contare. Deberia de ir bien, ademas los archivos a subir no son muy grandes, mas bien pequeños

Saludos
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 2992
Enlace directo a este mensaje Enviado: 10/Mayo/2019 a las 01:24
Quizas sea suficiente el cambiar el parametro false por true.
Esto indica que la solicitud se haga en modo asincrono de manera que no se detiene la ejecucion de codigo vba. Podrias colocar un reloj indicando que el proceso se esta ejecutando.
Hay un evento que te indica que el proceso finalizo. Utilizalo para detener el reloj.
https://tucondominioaldia.net
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1006
Enlace directo a este mensaje Enviado: 09/Mayo/2019 a las 22:43
Entiendo que los tiempos que has puesto son más que suficientes (son casi 3 horas).

Menos el tiempo del envío del archivo(send), para los demás con un par de segundos debe sobrar.

Si el archivo no pasa de 150 mb no pasa nada. Pero si pasa, entiendo que sí debes usar una sesión.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2003
Enlace directo a este mensaje Enviado: 09/Mayo/2019 a las 20:05
Publicado originalmente por pitxiku pitxiku escribió:

Puede que en vez de usar el método upload, tengas que usar una sesión para subir archivos grandes:

- https://www.dropbox.com/developers/documentation/http/documentation#files-upload_session-start


Justo ahora estaba probando y he conseguido subir un archivo de 144mbm en principio mas que suficiente para lo que quiero. He puesto esta linea.

Set req = CreateObject("WINHTTP.WinHTTPRequest.5.1")
req.SetTimeouts 30000, 1000000, 1000000, 1000000
req.Open "POST", "https://content.dropboxapi.com/2/files/upload", False
ResolveTimeout,ConnectTimeout,SendTimeout,ReceiveTimeout

Son tiempos en milisegundos, lo que no he encontrado es que limites se pueden poner.. Y esa linea tiene que ir antes de Open

Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1006
Enlace directo a este mensaje Enviado: 09/Mayo/2019 a las 19:27
Puede que en vez de usar el método upload, tengas que usar una sesión para subir archivos grandes:

- https://www.dropbox.com/developers/documentation/http/documentation#files-upload_session-start
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2003
Enlace directo a este mensaje Enviado: 08/Mayo/2019 a las 21:19
Hola

Probando con algunos archivos de uno 25mb me a dado el error en esta linea  req.send (result)
-Se supero el tiempo de espera para esta operacion  error -21470122894(80072ee2)

Se puede solucionar esto, modificar el limite de tiempo o alguna otra solucion??

Saludos
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4927
Enlace directo a este mensaje Enviado: 08/Mayo/2019 a las 17:14
Hola Rokoko

El 200 es que la petición que estas haciendo fue correcta, y te va a devolver la respuesta.


Saludos.


Editado por emiliove - 08/Mayo/2019 a las 17:16
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2003
Enlace directo a este mensaje Enviado: 08/Mayo/2019 a las 16:58
Hola

Alguna duda me queda..
Este parametro que es, algun tiempo de respuesta??   If req.status = 200 Then

Y por otro lado y probando pensando que no funcionaria, he creado un cuadro de dialogo para selecionar un archivo a subir y logicamente la ruta que crea es con una sola barra y no la doble barra para JSON, pero el archivo sube bien!!!
Funciona con barra simple y doble(JSON).


Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 2992
Enlace directo a este mensaje Enviado: 08/Mayo/2019 a las 00:42
Un placer. Hay que realizar un ajuste en la ruta/nombre remoto, de lo contrario, crea dentro del directorio, uno nuevo.

varfile = "\/NOMBRE_Y_EXTENSION_FINAL_DEL_ARCHIVO_EN_DROPBOX"
La diferencia es remover el nomre del directorio, ya que el token esta asociado al mismo.
Recuerda enmascarar las barras inclinadas.

y para sobreescribir:
arg = "{""path"":""" & varfile & """,""mode"":""overwrite"",""autorename"":false,""mute"":true}"

Ayudando se aprende. Esta API es nueva para mi. Todas son muy parecidas.
https://tucondominioaldia.net
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2003
Enlace directo a este mensaje Enviado: 08/Mayo/2019 a las 00:26
Publicado originalmente por guarracuco guarracuco escribió:

Option Compare Database
Dim access_token As String
Dim req As Object
Dim vardir As String
.............

ClapClapClapClapClapClapClap funciona!!!
Madre mia, que arte teneis algunos en este mundillo.
Yo creo que ni metiendo todas las horas del mundo lo hago funcionar...complicado esto de las apis......

Mañana lo miro mas despacio y pregunto alguna duda..

Muchas muchas gracias

Saludos


Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 2992
Enlace directo a este mensaje Enviado: 07/Mayo/2019 a las 23:55
Option Compare Database
Dim access_token As String
Dim req As Object
Dim vardir As String
Dim varfile As String


Private Sub Command0_Click()
    Dim arg As String
    result = FRB(vardir)
    varfile = "\/TU_DIRECTORIO_EN_DRPBOX\/NOMBRE_Y_EXTENSION_FINAL_DEL_ARCHIVO_EN_DROPBOX"
    arg = "{""path"":""" & varfile & """,""mode"":""add"",""autorename"":false,""mute"":true}"
    Set req = CreateObject("WINHTTP.WinHTTPRequest.5.1")
    
    req.Open "POST", "https://content.dropboxapi.com/2/files/upload", False
    req.setRequestHeader "Authorization", "Bearer " & access_token       'Hay que poner el token de la aplicacion de dropbox en la variable
    req.setRequestHeader "Content-Type", "application/octet-stream"

    req.setRequestHeader "Dropbox-API-Arg", arg
    req.setRequestHeader "User-Agent", "api-explorer-client"
    req.send (result)
    
    If req.status = 200 Then
        Debug.Print req.responseText
    Else
        Debug.Print req.responseText
    End If
End Sub

Private Sub Form_Load()
access_token = "TU-TOKEN"

'ruta del archivo a enviar. Debes enmascarar las barras inclinadas para que sea formato JSON valido
vardir = "C:\\Users\\Carlos\\Documents\\MisOcx\\alter.txt"
End Sub

Function FRB(ByVal sRuta As String) As Byte()
    Dim b() As Byte
    Open sRuta For Binary As #1
    ReDim b(FileLen(sRuta) - 1) '''''****ESTE -1 ES LA SOLUCIÓN PARA QUE NO CORROMPA LOS ARCHIVOS******RESTARLE UN BYTE
    Get #1, , b
    Close #1
    FRB = b
End Function

Reemplaza tu token, nombre de carpeta remota y ruta del archivo a subir.

https://tucondominioaldia.net
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2003
Enlace directo a este mensaje Enviado: 07/Mayo/2019 a las 22:51
Publicado originalmente por guarracuco guarracuco escribió:

Busca en el panel de control de Dropbox credenciales de prueba (Sandbox Credentials) y me las envias por privado.
Ignoro si esa API tiene credenciales de prueba.

Imprime la respuesta del servidor y publicalo para ver el mensaje que devuelve la API.

A ver, lo de las credenciales de prueba no lo veo por ningun lado(uso version gratuita de dropbox) no se si sera por esto....
y en la ventana inmediato me sale esto

La variable utiliza un tipo de Automatización no admitido en Visual Basic
Error in call to API function "files/upload": HTTP header "Dropbox-API-Arg": could not decode input as JSON

Muchas gracias
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable