Почему записанный файл больше, чем исходный в nodejs, используя writeStream? - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь записать файл на диск, который представлен в виде строки base64 в json request payload. Я пробовал writeFile и writeStream, и это происходит без ошибок, но когда я пытаюсь запустить сохраненный файл как исполняемый файл (deb / exe) - он показывает ошибки (некоторые двоичные данные в файле tar.gz и нет результатов file_to_app, чтобы показать в файле deb). Я вижу, что файлы на диске, сохраненные с помощью nodejs, на 10-30 байт больше оригинального. Что может вызвать эту проблему?

const createProductLink = async (app, product) => {
  try {
    const err = new Error();
    let filename = null;
    let correctTypeFlag = null;
    let temp = null;
    let extData = null;
    let appFormat = null;
    let pathPrefix = null;
    let appType = null;
    if (app.data) {
      [extData] = app.data.split(';');
      [temp, appType] = extData.split(':');
      [temp, appFormat] = appType.split('/');
      const extension = getExtension(appFormat);
      const platform = app.platform.split(' ')[0].toLowerCase();
      console.log(appType, appFormat, extension);
      pathPrefix = getPathPrefix(platform);
      correctTypeFlag = appTypes.includes(extension);
      if (!correctTypeFlag) {
        err.name = 'Validation Error';
        err.message = 'Wrong file format';
        throw err;
      }

  const file = Buffer.from(app.data, 'base64');
  if (file.byteLength > 1024 * 1024 * 300) {
    err.name = 'Validation Error';
    err.message = 'Application size should be less than or equal to 300 MB.';
    throw err;
  }
  filename = `${product.replace(/\s/g, '')}-${app.version}_${app.releaseDate}.${extension}`;
}

return new Promise(async (resolve, reject) => {
  const dest = `${appPathPrefix}${pathPrefix}${filename}`;
  const wStream = fs.createWriteStream(path.join(__dirname, dest));
  await wStream.write(file);
  wStream.on('finish', (error) => {
    if (error) throw error;
    app.link = dest;
    resolve(app.link);
  });
  wStream.on('error', (error) => { console.log('error ', error); reject(error); });
  wStream.on('close', () => console.log('closed'));
  wStream.end();
  resolve(dest);
}).catch(error => { throw error; });
  } catch (err) {
    throw err;
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...