AWS Lambda - PDF 上传到 S3 return 个空白页

AWS Lambda - PDF Uploads to S3 return blank pages

我想上传包含一些数据页的 PDF 声明,但是上传到 S3 的 PDF 一直返回空白页。似乎大多数解决方案似乎都围绕着将 Buffer 类型转换为 base64,我已经尝试过了,但我得到了一个空白的 PDF。

我已经在 API 网关 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());

原来它是在 API 网关上添加二进制媒体类型 multipart/form-data,这必须部署并且更改生效需要一段时间,现在我不再空白PDF :).