неправильная проверка заголовка при попытке распаковать тело объекта s3?

Я сжимаю и загружаю объект в s3, используя следующий код:

       let data: string | Buffer = JSON.stringify(rules);
  let contentType = "application/json";
  let encoding = null;
  let filename = `redirector-rules.json`;
  if (format === "gz") {
    contentType = "application/gzip";
    encoding = "gzip";
    filename = `redirector-rules.gz`;
    const buf = Buffer.from(data, "utf-8");
    data = zlib.gzipSync(buf);
  }

  // res.end(data);
  // return res.status(200).send(data);
  await s3.upload(filename, data, contentType, encoding);

Я предполагаю, что это работает правильно, так как, когда я загружаю файл результата, используяaws s3 cpкоманда работает нормально, и я могу распаковать ее на своей машине. Кроме того, возможно, не связанный с этим факт, если я скачаю через консоль для s3, моя система не сможет его распаковать, и он, возможно, будет поврежден или усечен.

с другой стороны, у меня есть лямбда-код, который читает получение объекта и пытается его распаковать:

      const getRules = async (rulesCommand: GetObjectCommand): Promise<Config> => {

    const resp = await fetchRulesFile(rulesCommand);
    const data = await parseResponse(resp, rulesCommand);

    return data;

};

const fetchRulesFile = async (rulesCommand: GetObjectCommand): Promise<GetObjectCommandOutput> => {
  try {
    console.log(`Retrieving rules file with name ${rulesCommand.input.Key}`);
    const resp = await client.send(rulesCommand);
    return resp;
  } catch (err) {
    throw new Error(`Error retrieving rules file: ${err}`);
  }
};

const parseResponse = async (resp: GetObjectCommandOutput, rulesCommand: GetObjectCommand): Promise<Config> => {
  const { Body } = resp;
  if (!Body) {
    throw new Error("No body in response");
  }

  let data: string = await Body.transformToString();

  if (rulesCommand.input.Key?.endsWith(".gz")) {
    console.log(`Uncompressing rules file with name ${rulesCommand.input.Key}`);
    try {
      data = zlib.gunzipSync(data).toString("utf-8");
    } catch (err) {
      throw new Error(`Error decompressing rules file: ${err}`);
    }
  }

  return JSON.parse(data) as Config;
};

но я продолжаю получать эту ошибку: Error: incorrect header check

0 ответов

Другие вопросы по тегам