Bagian 4 tentang File Upload dan Email Notification. [Tutorial ini]
Bagian 5 mengenai Deployment. (Coming soon)
Pada tutorial ini, kita akan membuat dua fitur yang lazim digunakan pada sebuah aplikasi web yaitu
fitur untuk mengunggah file dan fitur untuk notifikasi email.
Fitur upload file akan menggunakan
cloudlfare R2 bucket. R2 Bucket ini merupakan cloud storage yang bisa kita gunakan via
aws-sdk-net, proses yang sama seperti AWS S3. Kemudian, cloud storage ini bisa digunakan secara gratis (free tier)
dengan kapasitas yang cukup besar yaitu 10GB per bulan.
Fitur email pada tutorial ini akan menggunakan MailerSend. MailerSend merupakan email service
yang bisa kita gunakan untuk melakukan test pada saat development karena MailerSend menyediakan
kuota 3000 email gratis per bulan.
Okay, mari kita buat dua fitur ini.
File Upload
Pertama, kita buat terlebih dahulu dua file pada folder Pages yaitu FileUpload.cshtml dan
FileUpload.cshtml.cs. Nantinya, kita bisa mengakses halaman dan melakukan upload file pada
url /FileUpload.
Lalu, buka Pages/Shared/_Layout.cshtml dan tambahkan kode berikut agar terdapat menu file upload
pada navbar.
Menu pada navbar akan menjadi seperti ini.
Langkah berikutnya, pada file FileUpload.cshtml tambahkan kode berikut.
Informasi mengenai file yang sudah diunggah serta input untuk mengunggah file terdapat pada pada file ini.
Model.UploadedFilesList merupakan page model untuk informasi terkait file. Kemudian terdapat juga tombol
download file.
Lalu mari kita install AWS SDK untuk .NET agar bisa berinteraksi dengan R2 Bucket melalui terminal.
Langkah selanjutnya, tambahkan kode berikut pada file FileUpload.cshtml.cs.
FileUpload.cshtml.cs merupakan proses dimana upload file berlangsung nantinya. OnGetAsync akan
memunculkan daftar file yang telah diunggah. OnPostAsync melakukan proses untuk menyimpan file pada
R2 Bucket dan database. Nama file diubah menjadi unik (uniqueFileName) agar tidak terjadi overwrite karena ada kesamaan nama file.
InitializeS3Client() merupakan function untuk berinteraksi dengan R2 Bucket
melalui AWS SDK. Kemudian DownloadFile akan bejalan ketika user melakukan download file.
Setelah itu, mari kita buat model untuk file upload. Buat sebuah folder yaitu Model dan file
baru di dalamnya yaitu UploadedFilesModel.cs. Tambahkan kode berikut pada file tersebut.
Model ini merupakan struktur informasi yang akan kita simpan pada database. Buka file Data/ApplicationDBCOntext.cs
lalu ubah file menjadi seperti ini.
Kita menambahkan line public DbSet<UploadedFilesModel> UploadedFiles { get; set; } agar informasi
mengenai file yang sudah diunggah akan tersimpan di database.
Selanjutnya, kita harus melakukan update pada database agar terdapat table untuk informasi mengenai
file yang sudah diunggah. Sebelumnya, pastikan dotnet-ef sudah terinstall. Apabila belum terdapat dotnet-ef, jalankan
perintah ini untuk install dotnet-ef melalui terminal.
Lalu, kita buat sebuah migration dengan perintah ini pada terminal.
Langkah selanjutnya adalah update database kita dengan menjalankan ini.
Jika terdapat error, kawan-kawan bisa melakukan build secara clean terlebih dahulu dengan perintah ini,
lalu mencoba lagi dengan membuat migration dan menjalankan database.
Proses berikutnya adalah melakukan setting pada Cloudflare R2 Bucket. Kita akan menggunakan
informasi Account ID, Access Key ID, dan Secret Key ID agar kita bisa berinteraksi dengan R2 Bucket
melalui AWS SDK.
Untuk melakukan setting pada R2 teman-teman bisa mengikuti langkah berikut:
Login ke dashboard Cloudflare dan pilih R2.
Pilih Create Bucket.
Masukan nama boilerplate-aspdotnet-core (teman-teman juga bisa menggunakan nama yang lain).
Copy Account ID yang ada di dashboard.
Lalu pilih Manage R2 API Tokens.
Kemudian Pilih Create API Token.
Pada dialog untuk API Token, isi Token Name menjadi boilerplate-aspdotnet-core-token dan set permissions menjadi Admin Read & Write.
Selanjutnya pilih Create API Token
Copy Access Key ID dan Secret Access Key. Nantinya, informasi ini akan kita gunakan bersama Account ID (Langkah keempat).
Setelah setting R2, mari kita tambahkan informasi Account ID, Access Key ID, dan Secret Key ID
pada project kita melalui terminal dengan perintah berikut ini. Informasi ini hanya digunakan pada saat
proses development saja. Untuk versi production, kita bisa gunakan metode lain untuk menyimpan informasi ini (dibahas pada tutorial bagian 5).
Mari kita coba fitur upload ini dengan menjalankan aplikasinya.
Silakan teman-teman mengunjungi /FileUpload dan melakukan proses upload file. Setelah upload, file
akan muncul pada daftar yang di halaman File Upload. Ketika teman-teman klik download, proses
download akan langsung berjalan. Kemudian, file yang telah diunggah bisa teman-teman lihat di Dashboard Cloudflare R2.
Berikut ini merupakan contoh file-file yang sudah diunggah ke R2 Bucket melalui aplikasi ini.
Notifikasi Email
Mari kita setting MailerSend sebagai email service aplikasi ini.
Login ke dashboard MailerSend (teman-teman bisa daftar terlebih dahulu kalau belum punya akun MailerSend).
Pilih menu Domain.
Pada informasi domain, klik trial domain yang telah disediakan oleh MailerSend. Kita akan menggunakan domain ini untuk mengirim email.
Selanjutnya pilih Generate Token dan beri nama token menjadi boilerplate-email-dev serta pilih permission level Full Access.
Pilih Create Token dan copy API Token yang muncul karena akan kita gunakan nanti.
Selanjutnya, mari kita tambahkan informasi ini sebagai user-secrets pada project ini melalui terminal
Langkah berikutnya adalah integrasi email service ini pada proses registrasi user. Saat ini,
aplikasi kita akan melakukan redirect ke halaman Register confirmation setelah user melakukan registrasi.
Kita akan menonaktifkan halaman ini sehingga user hanya bisa mengaktifkan akunnya dengan mengunjungi verification link
yang dikirmkan melalui email.
Buka file Areas\Identity\Pages\Account\RegisterConfirmation.cshtml.cs. Ubah pada kode di line 63 dengan mengganti value
DisplayConfirmAccountLink dari true menjadi false.
Setelah itu, tambahkan function berikut ke dalam file Areas\Identity\Pages\Account\Register.cshtml.cs.
Kemudian pada file yang sama, ubah function OnPostAsync dan tambahkan kode berikut.
Berikut hasil akhir file Areas\Identity\Pages\Account\Register.cshtml.cs.
SendEmailAsync berisi proses untuk mengirimkan email ke API MailerSend melalui HTTP POST ke
endpoint https://api.mailersend.com/v1/email.
Kemudian, buka Program.cs dan tambahkan kode HTTP Client.
Okay, sekarang mari kita jalankan aplikasi ini.
Teman-teman bisa menuju halaman register dan tambahkan user baru. Setelah proses registrasi selesai,
akan muncul halaman Register Confirmation serta email yang sudah dikirimkan ke user.
Berikut contoh email yang dikirimkan kepada user.
Ketika user klik link yang ada pada email, maka user tersebut diaktifkan akunnya sehingga
bisa melakukan login pada aplikasi.
Saat ini boilerplate ini sudah mempunyai dua fitur tambahan yaitu upload file dan notifikasi email.
Kedua fitur ini merupakan fitur esensial pada sebuah aplikasi. Teman-teman bisa melakukan proses
lain dengan menggunakan kode pada tutorial ini misalnya menambahkan fitur user profile picture,
forgot password, atau melakukan notifikasi aktivitas pada user melalui email.
Pada bagian selanjutnya, kita akan melakukan proses akhir yaitu deployment untuk aplikasi
sehingga aplikasi boilerplate ini menjadi siap untuk dirilis kepada user nantinya.