Estoy trabajando en una solución donde:
La aplicación Node.js devuelve el archivo de la siguiente manera:
// create pdf, save it locally .... fs.readFile(pdf, function (err,data){ response.set({ 'content-type': 'application/pdf; charset=utf-8' }); response.send(data); });El punto final de PHP obtiene binario usando curl:
$request['url'] = 'https://www.test.com'; $payload = json_encode($request); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,'http://service.url'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:application/json; charset=UTF-8']); curl_setopt($ch, CURLOPT_ENCODING ,'UTF-8'); $data = curl_exec($ch); curl_close($ch); return $this->json(['data' => $data]);La aplicación vue obtiene el archivo de la siguiente manera:
async getPdf({ requestId }) { const result = await Api.get(`/pdf`, { timeout: 30000, }); return result.data; }, .... .... const blob = new Blob([response], { type: 'application/pdf' }); const link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.download = 'test.pdf'; link.click(); El problema ocurre cuando intento obtener el búfer del archivo. El punto final de PHP me da el error " Malformed UTF-8 characters, possibly incorrectly encoded ".
Traté de resolver esto agregando $data = mb_convert_encoding($data, 'UTF-8', 'UTF-8'); para rizar la respuesta, pero esto resultó en un PDF vacío, supongo que este es el problema de codificación. El archivo PDF está perfectamente bien, ya que primero se guarda localmente y luego lo procesa la aplicación de nodo.
¿Alguna idea sobre cómo resolver el problema de codificación? ¿Hay una mejor manera de transferir el búfer de archivos?