javascript AWS S3 SDK -从下一步上传,Vercel上的js API端点- ERR_HTTP_HEADERS_SENT

pn9klfpd  于 2023-04-28  发布在  Java
关注(0)|答案(1)|浏览(89)

我正在尝试从我的Next上传文件。使用@aws-sdk/client-s3包在Vercel上运行的js API端点。下面是一个例子:

import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
import type { NextApiRequest, NextApiResponse } from "next";

export default async function handler(req: NextApiRequest, res: NextApiResponse) {
  const s3Client = new S3Client({});

  const uploadCommand = new PutObjectCommand({
    Bucket: process.env.MY_S3_BUCKET,
    Key: "test/testUpload.json",
    Body: JSON.stringify({ message: "Hello World" }),
  });

  const response = await s3Client.send(uploadCommand);

  res.status(200).json(response);
}

这段代码将在我的本地主机上完全正常运行,并按预期将文件上传到s3。但是,一旦将其部署到我的Vercel环境中,我就从@aws-sdk包中收到以下错误。

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at new NodeError (node:internal/errors:399:5)
    at ClientRequest.setHeader (node:_http_outgoing:663:11)
    at mod.request (/var/task/___vc/__launcher.js:90:17)
    at /var/task/node_modules/@aws-sdk/node-http-handler/dist-cjs/node-http-handler.js:70:25
    at new Promise (<anonymous>)
    at NodeHttpHandler.handle (/var/task/node_modules/@aws-sdk/node-http-handler/dist-cjs/node-http-handler.js:49:16)
    at async /var/task/node_modules/@aws-sdk/middleware-serde/dist-cjs/deserializerMiddleware.js:5:26 {
  code: 'ERR_HTTP_HEADERS_SENT',
  '$metadata': { attempts: 1, totalRetryDelay: 0 }
}

使用以下软件包版本:

"@aws-sdk/client-s3": "3.278.0",

我已经多次验证了S3客户端连接的环境变量,并尝试了几种不同的方法来传递对象的主体/键。我还尝试使用promise链接代替wait,并将wait全部移除。最后,我尝试了返回来自端点的响应,而不是我在示例中的方式。
最奇怪的是,它在某个时候工作,我仍然有成功上传的文件在桶中。
任何想法/见解将不胜感激。

9wbgstp7

9wbgstp71#

我是维塞尔队的斯瓦纳瓦。我们已经为这件事做了一个解决方案。

相关问题