, 8 min read
Pada tutorial kali ini Kita akan belajar mengupload gambar pada Framwork Nest JS dan menseting supaya file bisa di akses menggunakan HTTP
Pada tutorial kali ini kita akan belajar cara mengupload File berupa gambar menggunakan Framework NestJS dan menseting supaya gambar bisa di akses secara public menggunakan HTTP
Pada contoh kali ini saya akan membuat Module "upload-gambar" dengan menggunakan Nest CLI
npx nest g mo upload-gambar
Setelah membuat Module selanjutnya adalah membuat Service dengan nam yang sama dengan Module yaitu "upload-gambar"
npx nest g s upload-gambar
Kemudian buatlah fungsi yang bertujuan untuk menyimpan path lokasi dari gambar yang di upload di dalam service.
import { Injectable } from '@nestjs/common';
@Injectable()
export class UploadGambarService {
/**
*
* @param path
*/
async upload(path: string) {
// Kita bisa membuat fungsi untuk menyimpan lokasi path file disini
return { statusCode: 200, path: path }
}
}
pada fungsi upload di dalam class UploadGambarService diatas adalah hanya menampilkan lokasi path file saja, namun kita bisa juga menyimpan di dalam database tergantung dengan kebutuhan dari kita.
Kita akan menggunakan Multer untuk Filesystem di Nest JS
yarn add -D @types/multer
Buat controller yang akan berguna sebagai Route yang akan langsung di akses menggunakan API.
Masukan perintah menggunakan Nest CLI
npx nest g co upload-gambar
perintah di atas akan membuat File "upload-gambar/upload-gambar.controller.ts"
import { Controller } from '@nestjs/common';
@Controller('upload-gambar')
export class UploadGambarController {}
import { Controller, Post, UploadedFile, UseInterceptors } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
@Controller('upload-gambar')
export class UploadGambarController {
@Post('upload')
@UseInterceptors(FileInterceptor('file',{dest:'public/upload'}))
async upload(@UploadedFile() file: Express.Multer.File){
console.log(file)
}
}
Pada fungsi upload di dalam controller di atas terdapat FileInterceptor yang di gunakan untuk mengolah request File oleh Multer.
Informasi File akan dimasukan ke dalam "@UploadedFile() file" dan kita bisa mengambil informasi File dengan "file"
Sekarang kita bisa mencoba melakukan upload file dengan menggunakan API dengan URL
/upload-gambar/upload
kita bisa mencoba API dengan method POST.
Jalankan Nest JS dengan perintah
yarn start:dev
atau
npn run start:dev
Kemudian Test request menggunakan tools API Testing seperti Postman, Thunder Client. pada contoh ini saya menggunakan Thunder Client yang bisa langsung digunakan didalam Visual Studio Code.
Jika kita melakukan request upload File maka format file akan seperti gambar dibawah ini
File tersimpan di dalam folder public/upload dengan nama random dan tanpa Extension. untuk menambahkan extension bisa banyak cara, cara yang paling mudah adalah dengan mengkombinasi nama file dan extension. ubah code menjadi seperti
import { Controller, Post, UploadedFile, UseInterceptors } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { diskStorage } from 'multer';
@Controller('upload-gambar')
export class UploadGambarController {
@Post('upload')
@UseInterceptors(FileInterceptor('file',{
dest:'public/upload',
storage: diskStorage({
destination:'public/upload',
filename(req, file, cb) {
return cb(null,file.originalname)
},
})
}))
async upload(@UploadedFile() file: Express.Multer.File){
console.log(file)
}
}
Kemudian coba test upload lagi seperti sebelumnya
pada gambar diatas file di simpan dengan original name.
Sampai saat ini kita berhasil mengupload file pada Framework Nest JS, selanjutnya adalah buat folder public supaya bisa di akses menggunakan HTTP.
Untuk mengakses file menggunakan HTTP kita harus mendaftarkan folder "public" supaya bisa di akses dari HTTP.
yarn add @nestjs/serve-static
atau
npm install --save @nestjs/serve-static
Edit AppModule.ts dan tambahkan module ServerStatic
import { Module } from '@nestjs/common';
import { ServeStaticModule } from '@nestjs/serve-static';
import { join } from 'path';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UploadGambarModule } from './upload-gambar/upload-gambar.module';
@Module({
imports: [
UploadGambarModule,
ServeStaticModule.forRoot({
rootPath: join(__dirname, '..', 'public'),
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
yarn start:dev
Buka browser dan masukan URL "http://localhost:3000/upload/next.png"
Untuk menyimpan path gambar ke dalam database kita bisa meneruskan filepath ke dalam service yang sudah kita buat sebelumnya
import { Controller, Post, UploadedFile, UseInterceptors } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { diskStorage } from 'multer';
import { UploadGambarService } from './upload-gambar.service';
@Controller('upload-gambar')
export class UploadGambarController {
constructor(private uploadGambarService:UploadGambarService){}
@Post('upload')
@UseInterceptors(FileInterceptor('file',{
dest:'public/upload',
storage: diskStorage({
destination:'public/upload',
filename(req, file, cb) {
return cb(null,file.originalname)
},
})
}))
async upload(@UploadedFile() file: Express.Multer.File){
return await this.uploadGambarService.upload(file.path)
}
}
https://github.com/mister-coding/example_nestjs
Branch : example_upload_gambar
Tags