Skip to main content

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

· 2 min read
Héctor Mansilla Arias

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);

}

};