Sube archivos de Zoho Creator a Dropbox con Deluge.

Enviar archivos de Zoho Creator a Dropbox

El almacenamiento de Creator no es el lugar más económico para guardar una década de cartas de autorización firmadas. En su lugar, súbelas a Dropbox, nombrándolas según el registro para que sean fáciles de encontrar, y conserva solo la ruta en Creator.

Tres elementos distintos del código original han desaparecido. Primero, llamaba a la API v1 de Dropbox ( api.dropbox.com/1/save_url/ ), que Dropbox retiró hace años, no solo la autenticación, sino toda la versión de la API. Segundo, utilizaba un token de acceso de larga duración ; Dropbox dejó de emitirlos el 30 de septiembre de 2021 y ahora requiere tokens de corta duración que se actualizan a partir de un token de actualización almacenado, con una aplicación con ámbito. Tercero, y este es el que nadie espera, acortaba la URL del archivo mediante el Acortador de URL de Google , que cerró en 2019 y cuyos enlaces dejaron de funcionar por completo en agosto de 2025. Tres dependencias obsoletas en una función de veinte líneas.

En el original hay una credencial activa. El script de 2018 contiene un token de portador de Dropbox sin enmascarar, codificado directamente en el mapa de encabezado. Si tiene una copia del original, revoque ese token en la consola de la aplicación Dropbox. Todo lo que aparece a continuación utiliza marcadores de posición con nombre.

Antes de empezar

  • Una aplicación con ámbito en la consola de aplicaciones de Dropbox con el ámbito files.content.write .
  • Un token de actualización. Autorízate una vez en un navegador con token_access_type=offline y luego guarda el refresh_token en un formato DBX_Token .
  • Una conexión Zoho OAuth llamada creator_oauth_connection para obtener el archivo.

Funciones de diluvio

 // ============================================
// ZOHO CREATOR -> DROPBOX
// Token de corta duración generado a partir de un token de actualización almacenado.
// ============================================

cadena Dropbox.getAccessToken()
{
    APP_KEY = "TU_CLAVE_DE_LA_APP_DE_DROPBOX";
    APP_SECRET = "TU_SECRETO_DE_LA_APP_DE_DROPBOX";

    almacenado = DBX_Token[ID != null] ordenar por Added_Time descendente rango de 0 a 1;

    cuerpo = Mapa();
    body.put("grant_type","refresh_token");
    cuerpo.put("refresh_token",stored.Refresh_Token);
    cuerpo.put("client_id",APP_KEY);
    cuerpo.put("client_secret",APP_SECRET);

    resp = invokeurl
    [
        URL: "https://api.dropboxapi.com/oauth2/token"
        tipo: POST
        parámetros: cuerpo
        encabezados: {"Content-Type":"application/x-www-form-urlencoded"}
    ];

    token = resp.getJSON("access_token");
    si(token == null)
    {
        info "Error de autenticación de Dropbox: " + resp.toString();
        devolver "";
    }
    devolver token;
}

void Dropbox.uploadFile(int recordId)
{
    rec = Soluciones[ID == recordId];

    if(isBlank(rec.Carta_Autorizacion))
    {
        información "No hay archivo registrado " + recordId;
        devolver;
    }

    token = thisapp.Dropbox.getAccessToken();
    si(token == "")
    {
        devolver;
    }

    // 1. Extraiga el archivo de Creator a través de una conexión OAuth.
    archivoObjeto = invocarurl
    [
        URL: "https://creatorapp.zohopublic.com/TU_CUENTA/TU_APP/report/Soluciones_Report/"
               + recordId + "/Carta_Autorizacion/descargar"
        tipo: GET
        conexión: "creator_oauth_connection"
    ];

    // 2. Dropbox-API-Arg debe ser JSON solo en formato ASCII.
    extensión = rec.Carta_Autorizacion.getSuffix(".");
    ruta = "/" + rec.MID + "/Carta-Autorizacion-" + rec.No_Poliza + "." + extensión;

    apiArg = "{\"path\":\"" + path + "\",\"mode\":\"add\",\"autorename\":true,\"mute\":false}";

    headerMap = Mapa();
    headerMap.put("Authorization","Bearer " + token);
    headerMap.put("Content-Type","application/octet-stream");
    headerMap.put("Dropbox-API-Arg",apiArg);

    resp = invokeurl
    [
        URL: "https://content.dropboxapi.com/2/files/upload"
        tipo: POST
        archivos: archivoObj
        encabezados: mapa de encabezados
    ];

    uploadedPath = resp.getJSON("path_display");
    si(uploadedPath != null)
    {
        rec.Ruta_Dropbox = Ruta_cargada;
        información "Subido a " + uploadedPath;
    }
    demás
    {
        info "Error al cargar en Dropbox: " + resp.toString();
    }
} 

Notas

  • No se necesita ningún acortador de URL. El enlace original se acortaba porque usaba save_url , que le pedía a Dropbox que descargara el archivo. Subir los bytes directamente es más sencillo, más rápido y elimina tanto el acortador como el enlace público.
  • Dropbox-API-Arg debe ser ASCII. Un nombre de archivo con acentos —por ejemplo, Autorización— rompe el encabezado. Transcríbalo o escápelo como ó . Esto causa problemas en las aplicaciones en español.
  • Los tokens de acceso duran aproximadamente cuatro horas. Genera uno por ejecución a partir del token de actualización, como se indicó anteriormente. No intentes almacenar uno en caché durante días.
  • Los archivos de más de 150 MB necesitan un punto final diferente : /2/files/upload_session/start , /append_v2 , /finish . La carga simple los rechazará.
  • autorename evita colisiones. Con mode: add y autorename: true , una carga repetida se convierte en el archivo (1).pdf en lugar de un error. Usa mode: overwrite solo cuando estés seguro de que quieres eliminar la versión anterior.

Este script forma parte de la biblioteca gratuita Creator Scripts Deluge.

Los 39 scripts de Deluge, el curso completo de Zoho Creator y todos los recursos descargables ahora son gratuitos. Obtén acceso gratuito →