Seleccione su idioma

Las extensiones para almacenamiento en la nube de Amazon, Azure y Google fueron desarrolladas en principio para ser usadas con el editor de contenido de Joomla, pero a lo largo del tiempo han ido cambiando para hacerlas más flexibles. A continuación se exponen las URL y sus funciones de los servicios REST que ofrecen estas extensiones. Estos servicios web fácilmente se pueden emplear en otras extensiones.

Por ejemplo, la extensión S3 Media expone las siguientes URLs como servicios web (esta información también es válida para las extensiones Azure Media y Google Cloud Media):

  • GET - index.php?option=com_media&task=api.files [/api/files con URL amigables] para obtener la lista de archivos y directorios en el Bucket
  • GET - index.php?option=com_media&task=api.files&format=json&path=sampledata/fruitshop/ [/api/files/sampledata/fruitshop/ con URL amigables] para obtener la lista de archivos y directorios en un subdirectorio (fruitshop)
  • GET - index.php?option=com_media&task=api.files&format=json&path=sampledata/fruitshop/&search=apple [/api/files/sampledata/fruitshop?search=apple [/api/files/sampledata/fruitshop?search=apple con URL amigables] para obtener una lista de archivos y directorios, en el Bucket o en un directorio, con un término de búsqueda dado
  • GET - index.php?option=com_media&task=api.files&format=json&path=/sampledata/fruitshop/test.jpg [/api/files/sampledata/fruitshop/test.jpg con URL amigables] para obtener información de un archivo específico
  • DELETE - index.php?option=com_media&task=api.files&format=json&path=sampledata/fruitshop/test/ [/api/files/sampledata/fruitshop/test/ con URL amigables] para borrar un subdirectorio en una ruta específica
  • DELETE - index.php?option=com_media&task=api.files&format=json&path=/sampledata/fruitshop/test.jpg [/api/files/sampledata/fruitshop/test.jpg con URL amigables] para borrar un archivo específico
  • POST - index.php?option=com_media&task=api.files&format=json&path=sampledata/fruitshop/ [/api/files/sampledata/fruitshop/ con URL amigables] para subir un nuevo archivo en una ruta específica, o para crear un nuevo directorio en una ruta específica

Para obtener una lista de los archivos y directorios en la cuenta pueden usar una función en javascript la cual generará por fetch para lanzar la solicitud hacia el API de la extensión y luego esta devuelve una lista con los datos de cada archivo o directorio, incluyendo la URL:

/**
 * Lista los objetos dentro de un directorio del contenedor.
 * @param {string} path La ubicación actual, ejemplo: "dir1/". Si se pasa una cadena vacía, significa que la ubicación es la raiz del contenedor/bucket
 * @param {string} search Si se pasa este parámetro, se devolverá una lista de objetos con nombres que coincidan con el texto del parámetro.
 * @returns {undefined}
 */
function listObjects(path, search) {
    var url = window.location.href.split('#')[0] + "&task=api.files"; //index.php?option=com_s3media 
    var options = Joomla.getOptions('com_s3media', {});
    if (options.csrfToken === undefined) {
        throw new TypeError('Media api csrf token is not defined');
    }

    if (path !== undefined) {
        url += "&" + path;
    }

    if (search !== undefined) {
        url += "&search=" + search;
    }

    fetch(url, {
        method: 'GET',
        //mode: 'no-cors',
        headers: {
            "Accept": "application/json"
        }
    }).then(response => {
        if (!response.ok) {
            alert(response.statusText);
        }
        
        var json = response.json();
        return json;
    }).then(json => {
        if (!json.success) {
            alert(json.message);
        } else {
            
            for (let i = 0; i < json.data.length; i++) {
                console.log(json.data[i].url);
            }
        }
    });
}

Si se desea crear un directorio, con el método POST, algo como esto se puede hacer:

/**
 * Crea un directorio.
 * @param {path} Directorio base donde se crea el directorio. Si no se pasa, se asume que es el directorio raiz o bucket
 * @param {folderName} Nombre del nuevo directorio
 * @returns {unresolved}
 */
function createFolder(path, folderName) {
    var url = "index.php?option=com_s3media&task=api.files";
    var options = Joomla.getOptions('com_s3media', {});
    if (options.csrfToken === undefined) {
        throw new TypeError('Media api csrf token is not defined');
    }
    return fetch(url, {
        method: 'POST',
        headers: {
            "Accept": "application/json"
        },
        body: {options.csrfToken: 1, folderbase: base, name: folderName}
    }).then(response => {
        if (!response.ok) {
            return {'success': false, 'message': response.statusText};
        }
        var json = response.json();
        return json;
    }).then(json => {
        if (json.success) {
            alert("Directorio creado correctamente");
            return true;
        } else {
            alert(json.message);
            return false;
        }
    });
}

Para subir un archivo, en este caso se hace uso del objeto FormData para simular la carga del archivo a través de un formulario web:

/**
 * Sube el archivo al Bucket configurado.
 * @param {file} Campo file del formulario usado para subir el archivo.
 * @param {path} Directorio donde se sube el archivo. Si no se pasa, se asume que es el directorio raiz o bucket.
 * @return null
 */
function upload(file, path) {
    var url = document.getElementById('uploadForm').action; //index.php?option=com_googlecloudmedia&amp;task=api.files
    var options = Joomla.getOptions('com_googlecloudmedia', {});

    if (options.csrfToken === undefined) {
        throw new TypeError('Media api csrf token is not defined');
    }
    var form = new FormData();
    form.append(options.csrfToken, 1);
    form.append("file", file);
    form.append('path', path);
    // crear el post para el bucket.

    fetch(url, {
        method: 'POST',
        headers: {
            "Accept": "application/json"
        },
        body: form
    }).then(response => {
        if (!response.ok) {
            alert(response.statusText);
        }
        var json = response.json();
        return json;
    }).then(json => {
        if (!json.success) {
            alert(json.message);
        } else {
            alert("Archivo subido correctamente");
        }
    });
}

Por último, si se desea borrar un archivo o un directorio, de manera similar a crear un directorio, se puede borrar, mediante el método DELETE:

/**
 * Borra un archivo o directorio en el contenedor
 * @param {path} La ruta del archivo/directorio que se va a borrar. 
 * @return boolean Si el directorio no está vacío, devolverá false. 
 */
function delete(path) {
    var url = "index.php?option=com_azuremedia&task=api.files&path=" + path;
    var options = Joomla.getOptions('com_azuremedia', {});
    if (options.csrfToken === undefined) {
        throw new TypeError('Media api csrf token is not defined');
    }

    var formData = new FormData();
    formData.append(options.csrfToken, 1);

    return fetch(url, {
        method: 'DELETE',
        headers: {
            "Accept": "application/json",
            "X-Csrf-Token": options.csrfToken
        },
        body: formData
    }).then(response => {
        var json = response.json();
        return json;
    }).then(json => {
        if (json.success) {
            alert("Objeto borrado correctamente");
            return true;
        } else {
            alert("El objeto no se pudo borrar");
            return false;
        }
    });
}

Soporte

Información Legal