Decoding Base64 Into Image File using Go


Kali ini saya akan membahas bagaimana melakukan decoding kode base64 menjadi file image menggunakan Go. Teknik ini biasanya digunakan dalam aplikasi yang berbasis REST. Misalnya ketika user melakukan upload foto, UI layer akan mengirimkan kode base64 ke backend API untuk memproses data tersebut. Apabila user mengirim kode base64 untuk data image, maka backend API akan melakukan decoding untuk men-generate file image tersebut.

Misalnya, user mengirim json berikut.

{
   "data" : "{base64}", // diisi dengan kode base64
   "title": "Raka Teja
}

Maka, sistem akan men-generate file image berdasarkan kode base64 diatas. Dalam artikel ini, saya menggunakan Go Martini untuk memudahkan dalam pembuatan RESTful API.

func main() {
   server := martini.Classic()
   server.Post("/image", imageHandler)
   server.Run()
}

func imageHandler(rw http.ResponseWriter, req *http.Request) {
   body, err := ioutil.ReadAll(req.Body)
   if err != nil {
      panic(err)
   }
   if err := req.Body.Close(); err != nil {
      panic(err)
   }
   
   var image Image
   if err := json.Unmarshal(body, &image); err != nil {
      panic(err)
   }

   go writeImage(image)
   
   fmt.Fprint(rw, "Success")
}
func writeImage(image Image) {
   data, err := base64.StdEncoding.DecodeString(image.Data)
   if err != nil {
      panic(err)
   }

   file, err := os.Create(fileName(image))
   if err != nil {
      panic(err)
   }
   defer file.Close()

   n, err := file.Write(data)
   if err != nil {
      panic(err)
   }

   fmt.Println("File size :", n)

}

func fileName(image Image) string {
   name := strings.Replace(image.Title, " ", "-", -1)
   return strings.ToLower(name) + ".png"
}

 Kemudian, silahkan build dan jalankan.

go build server.go

./server

Setelah di-test, nanti akan muncul file image dengan nama file sesuai dengan request body yang dikirim.

Sekian, happy coding \m/

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s