일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 신입 이력서
- Next.js
- 개발
- s3 bucket
- 개인 프로젝트
- MONGOOSE
- 공부
- 캐플라이어
- react
- aws s3
- Next.js 13
- 신입 개발자
- Javascript
- 구상
- TypeScript
- 백엔드
- 기획
- 회고
- 프론트엔드
- 신입 프론트엔드
- 계획
- 신입
- 이력서
- CSS
- 개인프로젝트
- 대학졸업
- 개발자 이력서
- 삶
- Today
- Total
개발 마라톤
10/18 - S3Client 업로드 시에 TypeError: Second parameter is not an object. 본문
10/18 - S3Client 업로드 시에 TypeError: Second parameter is not an object.
망__고 2023. 10. 18. 23:29
TypeError: Second parameter is not an object.
S3Client 업로드 시에 TypeError: Second parameter is not an object. · Issue #36 · 1004ljy980/CharFlyer
문제 Multer를 사용하지 않고 AWS S3 Bucket에 업로드 할 수 있는 방법으로는 S3Client를 이용하는 방법이있다. ( 여담이지만 AWS.S3 객체의 upload를 이용한 방식은 Cannot assign to read only property 'prototype' of fun
github.com
해당 이슈로 정리해두었다.
내용을 정리하면 다음과 같다.
const command = new PutObjectCommand({
Bucket: AWS_S3_BUCKET,
Key: file.name,
Body: file,
});
S3Client에 send시 사용하는 PutObjectCommand의 Body의 타입은 다음과 같다.

formData로 받아오는 파일의 기본 형식은 Blob이다.
유의할 점은, Blob 타입으로 보이는BrowserRuntimeStreamingBlobPayloadInputTypes의 BlobOptionalType의 경우,
브라우저 런타임 시 사용되는 Blob 타입으로, 기존의 Node.js Blob 타입과 다른 타입이다.
따라서 formData로 받아오는 파일을 그대로 body에 포함시킬 경우
TypeError: Second parameter is not an object.
와 같은 오류가 나타나게 된다.
결론적으로는 Node.js 런타임에서 Body를 설정하기 위해서는
NodeJsRuntimeStreamingBlobPayloadInputTypes 의 이름과 같이 그 내부의 타입인 Buffer로 file을 형 변환 시켜주어야 한다.
var arrayBuffer = await blob.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
단순히 해당 코드로 blob형을 Buffer 형식으로 변환 시킬 수 있으며, 이 buffer를 Body로 보내주게 되면
문제없이 S3Client로 업로드가 가능하다.
'--- Project --- > CharFlyer : 캐플라이어' 카테고리의 다른 글
10/20 - Next.js 13 비밀번호 암호화 (0) | 2023.10.20 |
---|---|
10/19 - uuid 모듈 (1) | 2023.10.19 |
10/17 - NextApiRequest와 NextRequest (0) | 2023.10.17 |
10/16 - Next.js 13 미들웨어 (0) | 2023.10.17 |
10/13 - Next.js FormData 다루기 (0) | 2023.10.13 |