1

我正在尝试将文件写入磁盘,该文件以 json 请求有效负载中的 base64 字符串形式出现。我尝试了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;
  }
};
4

0 回答 0