Tecnologías de la información · 18 noviembre, 2021 0

¿Cómo usar el servicio S3 de IBM Cloud a través de su API?

Ok, muchas veces las cosas se complican un poco más de la cuenta, y es en ese momento cuando requerimos el uso de accesos alternativos a diversos servicios. En este paso, requerimos actualizar un archivo almacenado en el servicio S3 de IBM Cloud.

Lo primero que debemos hacer, es solicitar el token para autenticarnos y que nos autorice a realizar los cambios, para ello ocupamos la función getToken:

const fs = require('fs');
const axios = require('axios').default;
const FormData = require('form-data');

require('dotenv').config()



const getToken = async () => {

    const headers = {
        'Content-Type': 'application/x-www-form-urlencoded'
    }

    const bodyFormData = new URLSearchParams()
    bodyFormData.append('grant_type', process.env.GRANT_TYPE);
    bodyFormData.append('apikey', process.env.API_KEY);

    const url = process.env.URL_TOKEN;
        
    try {
            
        const resp = await axios.post(url, bodyFormData, { headers: headers});
        return(resp.data.access_token)

    } catch (err) {
    
        console.error(err);
    
    }

};

Luego, con el token, debemos borrar el archivo. Lo cual realizaremos con la función deleteReport, a la cual le pasamos el token y el nombre del archivo a borrar:

const deleteReport = async (token, file) => {

    const headers = {
        'Content-Type': 'application/pdf',
        'ibm-service-instance-id': process.env.IBM_SERVICE_INSTANCE_ID,
        'Authorization': `Bearer ${token}`
    }

    const url = process.env.URL_S3 + file;

        
    try {
            
        const resp = await axios.delete(url, { headers: headers });
    
    } catch (err) {
    
        console.error(err);
    
    }

};

Finalmente, usamos la función putReport, pasándole el token y el archivo a subir para que se almacene en nuestro servicio S3 de IBM.

const putReport = async (token, reportFile) => {

    const headers = {
        'Authorization': 'Bearer ' + token,
        'Content-Type': 'application/pdf'
    }

    const bodyFormData = new FormData()
    bodyFormData.append('file', fs.createReadStream(reportFile)); 

    const url = process.env.URL_S3 + reportFile;
        
    try {
            
        const resp = await axios.put(url, bodyFormData, { headers: headers });

    } catch (err) {
    
        console.error(err);
    
    }

};