Tengo una cadena pdfFileFormat como se muestra a continuación:
"%PDF-1.5 4 0 obj <</Type /Page/Parent 3 0 R/Contents 5 0 R/MediaBox [0 0 612 792]/Resources<</Font<</FAAAAH 7 0 R/FAAAAJ 9 0 R/ FAAABD 13 0 R>>/XObject<</X1 11 0 R/X2 15 0 R>>>>/Group <</Type/Group/S/Transparency/CS/DeviceRGB>>>> endobj 5 0 obj <</Length 16 0 R/Filter /FlateDecode>>stream ... Cuando veo esta solicitud a través del cartero, aparece como un pdf: 
Estoy tratando de cargar esto en Firebase y puedo extraer la parte de texto como se muestra a continuación.
Probé estos dos métodos:
uploadBytes cadena de uploadString
const getBytesData = () => { if (user) { console.log('Getting'); getInvoicePDFStringByInvoiceId('129', user.token).then((data) => { console.log('Data = ', data); const blob = new Blob([data.message], { type: 'application/pdf' }); const storageRef = ref( storage, 'invoices/' + user.uid + '/' + '129.pdf' ); console.log('Uploading the file now'); uploadBytes(storageRef, blob) .then(() => { console.log('Uploaded a blob or file!'); }) .catch((error) => { console.log("Oops we're failing= ", error.message); }); }); } }; const uploadFromString = () => { if (user) { console.log('Getting'); getInvoicePDFStringByInvoiceId('129', user.token).then((data) => { const storageRef = ref( storage, 'invoices/' + user.uid + '/' + '129.pdf' ); console.log('Uploading the file now'); uploadString(storageRef, data.message) .then(() => { console.log('Uploaded a string'); }) .catch((error) => { console.log("Oops we're failing= ", error.message); }); }); } }; pero ninguno parecía estar funcionando. ¿Alguien puede decirme cómo lograr esto? O alguien ya ha hecho algo similar? Tenga en cuenta que la cadena anterior no está codificada en UTF-08 ni en base64, solo se conoce como pdfFileFormat .
Pude solucionar este problema. En lugar de convertir la respuesta en .text , usé .blob().then(data => {}) y luego envié los datos a la interfaz. Aquí está el código completo:
getInvoice().then((response) => { if (response.status !== 200) return { error: true, message: 'The requested invoice is unavailable at the moment', }; else return response .blob() .then((data) => { return { error: false, message: 'Blob acquired successfully', blob: data, }; }) .catch((error) => ({ error: true, message: error.message })); })Y así es como lo estoy emitiendo:
const getUserInvoicePDFString: express.Handler = async (req, res) => { const invoiceId = req.params.id as string; const invoicePdf = await getInvoiceAsPdf(invoiceId); if (invoicePdf.blob) { const blob = invoicePdf.blob; res.type(blob.type); return blob.arrayBuffer().then((buf) => { res.send(Buffer.from(buf)); }); } else return res.status(400).json( synthesizeSuccessResponse({ payload: invoicePdf, }) ); };