인프런 커뮤니티 질문&답변

반가우면반갑다고해님의 프로필 이미지

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

14-01 Trigger

el.createReadStream is not a function이라고나옵니다

해결된 질문

24.07.04 02:46 작성

·

99

0

 graphql-upload 버전 13.0.0으로 강의와 똑같이 맞춰줬는데도 에러가납니다 ㅠ_ㅠ
혹시 해결방안이있을까요?
계속 검색중인데 힘드네유..

혹시나 제가 해결했다면 해결했다고 댓글달겠습니다
해결했다는 댓글이 없으면 계속해서 트라이중인거니 댓글로 도와주시면 너무 감사하겠습니다

답변 2

0

노원두님의 프로필 이미지
노원두
지식공유자

2024. 07. 07. 13:25

안녕하세요! 반가우면반갑다고해님!

좋은 자료 공유 감사드립니다!^^
aws에 연동을 필요로 하는 수강생 분들께 많은 도움이 될 것 같아요!

감사합니다!

0

반가우면반갑다고해님의 프로필 이미지

2024. 07. 04. 02:53

해결했습니당.
강의에서는 구글스토리지를 사용했지만
저는 복습겸 다시 처음부터 만들면서 aws s3를 만들었습니다.
그러다보니 적용하는 코드도 좀 달라졌구요

      const { createReadStream, filename } = await file;

이렇게 await을 붙여야만 createReadStream를 가져올 수 있네요..

아마 강의코드도 비슷할꺼라 생각합니다.
저의 전체 코드입니당.

import { Injectable } from '@nestjs/common';
import * as AWS from 'aws-sdk';
import { IFilesService } from './interfaces/files-service.interface';
import { v4 as uuidv4 } from 'uuid';

@Injectable()
export class FilesService {
  private readonly s3: AWS.S3;

  constructor() {
    AWS.config.update({
      accessKeyId: process.env.AWS_ACCESS_KEY_ID,
      secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
      region: process.env.AWS_REGION,
    });
    this.s3 = new AWS.S3();
  }

  async upload({ files }: IFilesService): Promise<string[]> {
    const uploadPromises = files.map(async (file) => {
      const { createReadStream, filename } = await file;
      const stream = createReadStream();

      const params = {
        Bucket: process.env.AWS_BUCKET_NAME,
        Key: `${uuidv4()}/${filename}`,
        Body: stream,
      };

      console.log('params:', params);
      const res = await this.s3.upload(params).promise();
      console.log(`File: ${filename} uploaded successfully`);

      return res.Location;
    });

    const response = await Promise.all(uploadPromises);

    return response;
  }
}