Я пытаюсь загрузить файл из конечной точки API Next.js, работающей на Vercel, с помощью пакета @aws-sdk/client-s3. Вот пример:
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 Client, а также пробовал несколько разных способов передать тело/ключ объекта. Я также попытался использовать цепочку промисов вместо ожидания и удалить ожидание все вместе. Наконец-то попробовал вернуть ответ от конечной точки, а не как у меня в примере.
Самое странное в этом то, что в какой-то момент это работало, и у меня все еще есть файлы от той успешной загрузки в корзине.
Любые мысли/понимание будут высоко оценены.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Сварнава из команды Vercel здесь. Мы выдвинули исправление для этого.
Мы сталкиваемся с той же проблемой. Вроде регресс был.
Я также вижу это.
Это должно быть исправлено немедленно.
Моя проблема теперь решена. Спасибо!