Как сохранить файл на моем сервере nodejs из вызова веб-службы - PullRequest
0 голосов
/ 01 марта 2019

Моя проблема заключается в следующем: я позвонил в чей-то веб-сервис.Я получаю обратно имя файла, расширение и "байты".Байты на самом деле поступают в виде массива, и в позиции 0 «Bytes [0]» является следующей строкой:

JVBERi0xLjYKJeLjz9MKMSAwIG9iago8PC9EZWNvZGVQYXJtczw8L0sgLTEvQ29sdW1ucyAyNTUwL1Jvd3MgMzMwMD4+L1R5cGUvWE9iamVjdC9CaXRzUGVyQ29tcG9uZW50IDEvU3VidHlwZS9JbWFnZS9XaWR0aCAyNTUwL0NvbG9yU3BhY2UvRGV2aWNlR3JheS9GaWx0ZXIvQ0NJVFRGYXhEZWNvZGUvTGVuZ3RoIDI4Mzc0L0hlaWdodCAzMzAwPj5zdHJlYW0K////////y2IZ+M8+zOPM/HzLhzkT1NAjCCoEY0CMJNAjCR4c8HigRhBAi1iZ0eGth61tHhraTFbraRaYgQ8zMFyGyGM8ZQZDI8MjMI8M6enp9W6enp+sadIMIIEYwy/ggU0wwgwjWzSBUmwWOt/rY63fraTVNu6C7R7pN6+v///20v6I70vdBaPjptK8HUQfX9/17D/TMet+l06T//0v3/S9v+r98V0nH///7Ff+Ed3/v16X9XX/S/KP0vSb//W88ksdW18lzBEJVpPXT0k9b71///...

Приведенный выше пример строки обрезан для удобства чтения.Как мне взять эту строку и сохранить ее как читаемый файл?Это дело в формате PDF.

let pdfBytes = '{String shown above in example}'

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Я использую файловую систему fs для создания и сохранения файла.Я использую много попыток поймать на случай, если что-то пойдет не так.В этом примере показано, как можно передать данные в функцию, которая затем создаст файл для вас.

const util = require('util');
const fs = require('fs');

const fsOpen = util.promisify(fs.open);
const fsWriteFile = util.promisify(fs.writeFile);
const fsClose = util.promisify(fs.close);

function saveNewFile(path, data) {
  return new Promise((async (resolve, reject) => {
    let fileToCreate;

    // Open the file for writing
    try {
      fileToCreate = await fsOpen(path, 'wx');
    } catch (err) {
      reject('Could not create new file, it may already exist');
      return;
    }

    // Write the new data to the file
    try {
      await fsWriteFile(fileToCreate, data);
    } catch (err) {
      reject('Error writing to new file');
      return;
    }

    // Close the file
    try {
      await fsClose(fileToCreate);
    } catch (err) {
      reject('Error closing new file');
      return;
    }

    resolve('File created');
  }));
};

// Data we want to use to create the file.
let pdfBytes = 'JVBERi0xLjYKJeLj...'
saveNewFile('./filename.pdf', pdfBytes);
0 голосов
/ 01 марта 2019

Вы можете использовать модуль файловой системы Node.js для сохранения полученного буфера.
При условии, что кодировка ваших данных - base64:

const fs = require('fs');

let pdfBytes = 'JVBERi0xLjYKJeLjz9...'

let writeStream = fs.createWriteStream('filename.pdf');

writeStream.write(pdfBytes, 'base64');

writeStream.on('finish', () => {  
    console.log('saved');
});

writeStream.end(); 
...