У нас есть корзина S3, куда мы загружаем несколько файлов.
Когда пользователь загружает файл, он загружается в S3 bucket
, но при проверке содержимого файла он оказывается пустым (пустой файл).
Back End Code
// Importing modules
import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
// Setting up S3 client
const s3 = new S3Client({
credentials: {
accessKeyId: process.env.ACCESS_KEY_ID as string,
secretAccessKey: process.env.SECRET_ACCESS_KEY as string,
},
region: s3Info.S3_REGION,
});
const pdfContent = Buffer.from(file[0].buffer);
const params = {
Bucket: s3Info.S3_BUCKET_NAME,
Key: getFilePath(fileName),
Body: pdfContent,
ContentType: file[0].mimetype,
};
// Uploading the document.
const command = new PutObjectCommand(params);
const res = await s3.send(command);
return fileName;
Все работает нормально, но в корзину S3 попадают пустые документы.
🤔 А знаете ли вы, что...
JavaScript поддерживает работу с куки и хранилищем веб-браузера для сохранения данных на клиентской стороне.
Поскольку я использую AWS Lambda
и Serverless Framework для развертывания.
Теперь в моем файле serverless.yml мне не хватало части Binary media types
.
Итак, без Binary media types
в AWS API Gateway файл загружался, но был пустым.
После добавления plugin
под названием serverless-apigw-binary для моей бессерверной системы, а затем добавления типов apigwBinary как application/pdf
и multipart/form-data
в мой файл serverless.yml, все заработало.
# Example Serverless.yml code
plugins:
- serverless-apigw-binary
custom:
apigwBinary:
types:
- 'application/pdf'
- 'multipart/form-data'
В API Gateway мы также можем вручную добавлять типы мультимедиа, как показано на рисунке ниже.
Просто нажмите на свой шлюз API, затем выберите «Настройки API», и под ним вы увидите Binary Media Types
.