이미지는 DB에 직접 넣지 않고
이미지를 다운받을 수 있는 주소
를 넣는다.
실제 이미지는 다른 컴퓨터에 저장한다.
이미지는 용량이 굉장히 커서, 실제 이미지를 저장하는 컴퓨터는 사이즈가 매우 커야 한다.
파일 객체
라고 하며, 파일 사이즈등 파일에 대한 정보를 담고 있다.파일 객체
를 백엔드 서버에 업로드 요청한다.BLOB
타입으로 저장.Cloud Provider
회사에 Storage service(저장 서비스)
을 이용해 무제한으로 저장한다.BLOB
: bynary large object
: 0과 1로 구성된 이진 데이터
storage
에 저장되는 방식파일 업로드 API
를 통해 요청하면 storage
에 파일 저장Cloud Provider
에서 사진을 다운로드 할 수 있는 주소를 반환해준다.등록 API
를 요청사진 저장소(storage 등)
에서 사진을 다운받은 후 화면에 나타나기 때문에이미지 업로드 전 터미널 설치
yarn add apollo-upload-client
yarn add --dev '@types/apollo-upload-client'
file
파일 생성후 파일 추가
//files.module.ts
import { Module } from '@nestjs/common';
import { FilesResolver } from './files.resolver';
import { FilesService } from './files.service';
@Module({
providers: [
FilesResolver, //
FilesService,
],
})
export class FilesModule {}
// files.resolver.ts
import { Args, Mutation, Resolver } from '@nestjs/graphql';
import { FileUpload, GraphQLUpload } from 'graphql-upload';
import { FilesService } from './files.service';
@Resolver()
export class FilesResolver {
constructor(
private readonly filesService: FilesService, //
) {}
@Mutation(() => String)
uploadFile(
@Args({ name: 'file', type: () => GraphQLUpload }) file: FileUpload,
// 받을 때는 GraphQL 타입인 GraphQLUpload을 사용하고 받고난 후에는
// Typescript타입인 FileUpload 로 받아야한다.
): string {
return this.filesService.upload({ file });
}
}
// files.service.ts
import { Injectable } from '@nestjs/common';
import { IFilesServiceUpload } from './interfaces/files-service.interface';
import { Storage } from '@google-cloud/storage';
@Injectable()
export class FilesService {
async upload({ file }): string {
console.log(file)
// 1. 파일을 클라우드 스토리지에 저장하는 로직
// 2. 다운로드URL 브라우저에 돌려주기
return '강아지.jpg';
}
}
이후 로직은 TIL 통해서 추후 작성하오니 잠시만 기다려주시기 바랍니다!