• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

24.07.04 02:46 작성 조회수 38

0

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

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

답변 1

답변을 작성해보세요.

0

해결했습니당.
강의에서는 구글스토리지를 사용했지만
저는 복습겸 다시 처음부터 만들면서 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;
  }
}



채널톡 아이콘