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