Хобрук: Ваш путь к мастерству в программировании

AWS Lambda — при загрузке PDF в S3 возвращаются пустые страницы

Я хочу загрузить отчет в формате PDF, который содержит несколько страниц данных, однако PDF, загруженный на S3, возвращает пустые страницы. Кажется, что большинство решений вращаются вокруг преобразования типа Buffer в base64, я пробовал это, и я получил пустой PDF.

Я вручную добавил двоичный тип носителя на API Gateway multipart/form-data, и все равно получается пустой PDF-файл.

Как я могу убедиться, что PDF-файл не пустой?

import { Handler, Context, Callback } from "aws-lambda";
import S3, { PutObjectRequest } from "aws-sdk/clients/s3";

import httpMultipartBodyParser from "@middy/http-multipart-body-parser";
import httpErrorHandler from "@middy/http-error-handler";
import cors from "@middy/http-cors";
import middy from "@middy/core";
import createError from "http-errors";

const s3 = new S3();

const anonymizer: Handler = async (
  event: any,
  _context: Context,
  callback: Callback
) => {
  const {
    emailAddress,
    pdf: { filename, mimetype, content },
  } = event.body;

  const uploadRequest: PutObjectRequest = {
    Bucket: `anon-${process.env["NODE_ENV"]}`,
    Key: `${emailAddress}/${filename}`,
    ContentType: mimetype,
    Body: content,
  };

  try {
    const { Location } = await s3.upload(uploadRequest).promise();
    callback(null, {
      statusCode: 200,
      body: JSON.stringify({ fileLocation: Location }),
    });
  } catch (error) {
    throw createError(error.statusCode, error.errorMessage, error);
  }
};

export const anonymizerHandler = middy(anonymizer)
  .use(httpMultipartBodyParser())
  .use(httpErrorHandler())
  .use(cors());


Ответы:


1

Оказывается, он добавлял тип двоичного носителя multipart/form-data на шлюз API, его нужно было развернуть, и потребовалось некоторое время, прежде чем изменение вступило в силу, и теперь я больше не получаю пустые PDF-файлы :).

25.10.2020
Новые материалы

Я собираюсь научить вас Python шаг за шагом
Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

React on Rails
Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

Что такое гибкие методологии разработки программного обеспечения
Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

Ториго  — революция в игре Го
Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

Математика и интуиция - Часть 1
У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..