Super Kawaii Cute Cat Kaoani
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
{Troubleshooting}

[ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…] AWS SDK์™€ Multer-S3 ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ ๋ฐœ์ƒ

by wonee1 2025. 3. 3.
728x90

 

 

๐Ÿšจ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์™€ ์ƒํ™ฉ


Unhandled Error: TypeError: this.client.send is not a function
at _Upload.__uploadUsingPut

 

๐Ÿค” ๋ฌธ์ œ์˜ ์›์ธ ํŒŒ์•…ํ•˜๊ธฐ


์ด ์˜ค๋ฅ˜๋Š” AWS SDK v3๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ

aws sdk๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ multer์™€ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค

 

๐Ÿƒ๐Ÿป‍โ™€๏ธ ์‹œ๋„ํ•ด๋ณธ ๋ฐฉ๋ฒ•


 

1๏ธโƒฃAWS SDK ๋ฒ„์ „ ์ฒดํฌ

npm uninstall @aws-sdk/client-s3
npm install aws-sdk@2.1356.0

2๏ธโƒฃ multer & multer-s3 ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ

npm uninstall multer multer-s3
npm install multer@1.4.2 multer-s3@2.9.0

โœ… 3๏ธโƒฃ imageUploader.ts ์ˆ˜์ •

import AWS from "aws-sdk";
import multer from "multer";
import multerS3 from "multer-s3";
import { v4 as uuidv4 } from "uuid";
import dotenv from "dotenv";

dotenv.config();

// โœ… AWS S3 ์„ค์ •
const s3 = new AWS.S3({
  region: process.env.AWS_REGION,
  accessKeyId: process.env.AWS_ACCESS_KEY,
  secretAccessKey: process.env.AWS_SECRET_KEY,
});

// โœ… Multer-S3 ์Šคํ† ๋ฆฌ์ง€ ์„ค์ •
export const imageUploader = multer({
  storage: multerS3({
    s3: s3, // S3 ๊ฐ์ฒด
    bucket: process.env.AWS_S3_BUCKET_NAME as string, // S3 ๋ฒ„ํ‚ท ์ด๋ฆ„
    contentType: multerS3.AUTO_CONTENT_TYPE, // Content-Type ์ž๋™ ์„ค์ •
    key: (_, file, callback) => {
      const uploadDirectory = "uploads"; // โœ… S3 ๋‚ด ์—…๋กœ๋“œ ํด๋” ์ง€์ •
      const uuid = uuidv4(); // UUID ์ƒ์„ฑ
      callback(null, `${uploadDirectory}/${uuid}_${file.originalname}`);
    },
  }),
  // โœ… ํŒŒ์ผ ์šฉ๋Ÿ‰ ์ œํ•œ (์ตœ๋Œ€ 5MB)
  limits: { fileSize: 5 * 1024 * 1024 },
  // โœ… ํŒŒ์ผ ํ•„ํ„ฐ (์ด๋ฏธ์ง€ ํ™•์žฅ์ž๋งŒ ํ—ˆ์šฉ)
  fileFilter: (_, file, callback) => {
    const allowedExtensions = ["image/png", "image/jpg", "image/jpeg", "image/gif"];
    if (!allowedExtensions.includes(file.mimetype)) {
      return callback(new Error("ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ํ™•์žฅ์ž์ž…๋‹ˆ๋‹ค."));
    }
    callback(null, true);
  },
});

 

 

โœ… ๊ฒฐ๋ก 


ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ ์กฐ์‹ฌํ•˜์ž....

 

 

๐Ÿ’ก์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ

[error] S3 multer upload, this.client.send

 

[error] S3 multer upload, this.client.send

โœ๏ธ ์ด๋Ÿฐ ๋ถ€๋ถ„์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ค„์€ ๋ชฐ๋ž๊ณ , ํ•ด๊ฒฐ์ฑ…์„ ๋นจ๋ฆฌ ์ฐพ์•„์„œ ๋‹คํ–‰์ด์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

velog.io

 

728x90