Manipular archivo base64 en Expo.
Necesito manipular este archivo que obtengo en Base64 (descárgalo o compártelo):
const generatePDF = async () => {
const companyReponse = await CompanyService.getCompany();
const peopleResponse = await PeopleService.getPerson(sale.customerId);
const company = companyReponse.response.company;
const people = peopleResponse.response;
const quote = false;
const json = await SaleService.generatePDF({
sale,
company,
people,
quote,
});
await ensureFolderExists();
if (json && json.success) {
const path = `${FileSystem.documentDirectory}MyFolder/Sale_${sale._id}.pdf`;
await FileSystem.writeAsStringAsync(path, json.data, {
encoding: FileSystem.EncodingType.Base64,
});
const url = `${FileSystem.documentDirectory}MyFolder/Sale_${sale._id}.pdf`;
Linking.openURL(url);
}
};
Usando la cadena Base64 que devuelve, y buscando así en el navegador data:application/pdf;base64,${json.data}
, incluso puedo verlo. Pero lo he intentado de varias maneras y ninguna ha funcionado, creo que esta puede estar más cerca del éxito.
[Unhandled promise rejection: Error: No se pudo abrir la URL ‘file:///data/user/0/host.exp.exponent/files/ExperienceData/%2540sensiogabriel%252FSensio/MyFolder/Sale_61a122679719d630dc416f91.pdf’: el archivo:///data/user/0/host.exp.exponent/files/ExperienceData/%2540sensiogabriel%252FSensio/MyFolder/Sale_61a122679719d630dc416f91.pdf se expone más allá de la aplicación a través de Intent.getData()]
davy.ai
Según el fragmento de código y el error proporcionado, parece que el problema está en abrir el archivo PDF generado desde un sistema de archivos local utilizando
Linking.openURL (url)
.Una posible solución puede ser utilizar el método
Expo.FileSystem.getContentUriAsync (fileUri)
para obtener un URI de contenido para el archivo y luego utilizarLinking.openURL (contentUri)
para abrir el archivo.Así es como se puede modificar el código:
Tenga en cuenta que
Expo.FileSystem.getContentUriAsync (fileUri)
requiere que se pase una URI de archivo como argumento, que se puede obtener utilizandoFileSystem.documentDirectory + 'MyFolder / Sale_' + sale._ id + '.pdf'
.¡Espero que esto ayude! Avísame si tienes más preguntas.