Kode program : Upload file

Golang Web – Upload File

Saat membuat web, selain menerima input data berupa form dan query param, kadang kita juga menerima input data berupa file dari client, golang web sudah punya fitur management upload file. Hal ini memudahkan kita ketika butuh membuat web yang menerima input file upload.

Multipart

Saat kita ingin menerima upload file, kita perlu melakukan parshing terlebih dahulu menggunakan Request.ParseMultipartForm(size), atau kita bisa langsung ambil data file nya menggunakan Request.FormFile(name), di dalamnya secara otomatis melakukan parsing terlebih dahulu, Hasilnya merupakan data-data yang terdapat pada package multipart, seperti multipart.File sebagai representasi filenya, dan multipart.FileHeader sebagai informasi filenya.

Pertamatama, buatlah template baru dengan nama upload.form.gohtml dan isikan baris kode berikut

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Form Upload File</title>
</head>
<body>
<h1>Upload File</h1>
<form action"/upload" method="post" enctype="multipart/form-data">
    <label>Name :<input type="text" name="name"></label>
    <label>Name :<input type="file" name="file"></label>
    <input type="submit" value="Upload">
</form>
</body>
</html>

Selanjutnya buat juga file template upload.success.go dengan baris kode berikut

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Success</title>
</head>
<body>
<h1>{{.Name}}</h1>
<a href="{{.File}}">File</a>
</form>
</body>
</html>

Kemudian buat file baru dengan nama upload_file_test.go sebagai handler dan isikan abris kode berikut

package belajar_golang_web

import (
	"io"
	"net/http"
	"os"
	"testing"
)

func UploadForm(writer http.ResponseWriter, request *http.Request) {
	myTemplates.ExecuteTemplate(writer, "upload.form.gohtml", nil)
}

func Upload(writer http.ResponseWriter, request *http.Request) {
	file, fileHeader, err := request.FormFile("file")
	if err != nil {
		panic(err)
	}
	fileDestination, err := os.Create("./resources/" + fileHeader.Filename)
	if err != nil {
		panic(err)
	}
	_, err = io.Copy(fileDestination, file)
	if err != nil {
		panic(err)
	}
	name := request.PostFormValue("name")
	myTemplates.ExecuteTemplate(writer, "upload.success.gohtml", map[string]interface{}{
		"Name": name,
		"File": "/static/" + fileHeader.Filename,
	})
}

func TestUploadForm(t *testing.T) {
	mux := http.NewServeMux()
	mux.HandleFunc("/form", UploadForm)
	mux.HandleFunc("/upload", Upload)
	mux.Handle("/static", http.FileServer(http.Dir("./resources")))

	server := http.Server{
		Addr:    "localhost:8080",
		Handler: mux,
	}

	err := server.ListenAndServe()
	if err != nil {
		panic(err)
	}
}
Kode program : Upload file
Kode program : Upload file

Penutup

Pada artikel kali ini kita telah belajar tentang upload file pada golang web. Dan pada artikel selanjutnya saya akan membahas download file pada golang web.

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar

About Me

About Me

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam.

Social Profiles

Facebook