【问题标题】:AWS Lambda - PDF Uploads to S3 return blank pagesAWS Lambda - 上传到 S3 的 PDF 返回空白页
【发布时间】:2021-02-07 10:12:03
【问题描述】:

我正在寻找上传包含一些数据页面的 PDF 声明,但是上传到 S3 的 PDF 一直返回空白页。似乎大多数解决方案似乎都围绕着将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());

【问题讨论】:

    标签: node.js pdf amazon-s3 aws-lambda serverless-framework


    【解决方案1】:

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

    【讨论】: