こんにちは。現役エンジニアの”はやぶさ”@Cpp_Learningです。
GoのWebフレームワーク Fiber を活用した簡単なWebアプリの作り方をソースコード付きで紹介します。
Contents
今回つくるWebアプリ -ファイルダウンローダ-
今回つくるWebアプリは、サーバー側にある任意のファイルをクライアント側に保存するファイルダウンローダです。
実践 FiberでWebアプリ開発
「Fiber の紹介」や「ファイルアップローダの作り方」については、以下の記事で説明しているので、先に読むことをオススメします。
プロジェクトフォルダの構成は以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
workspace └─docker-go-fiber │──public │ └──index.html │──files │ │──download_file.png │ │──download_file.csv │ └──download_file.txt │──Dockerfile │──go.mod │──go.sum └──main.go |
filesフォルダの中身がダウンロードされるファイルです。
FiberでつくるWebアプリ main.go
FormValue と Download を活用した main.go が以下です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
package main import ( "fmt" "log" "github.com/gofiber/fiber/v2" ) // Simple GET handler func download(c *fiber.Ctx) error { // Read form fields // filename := "kururu.jpg" filename := c.FormValue("filename") // Server side file path file_path := fmt.Sprintf("./files/%s", filename) // Download file from server return c.Download(file_path) } func main() { // Fiber instance app := fiber.New() app.Static("/", "./public") app.Get("/download", download) log.Fatal(app.Listen("127.0.0.1:8080")) } |
ユーザーがフォームに入力したファイル名を取得し、サーバー側にあるファイルをクライアント側に転送します。
index.html
ユーザーが触るフォームを index.html に書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>File download</title> </head> <body> <h1>Download file</h1> <form action="/download" method="get"> File name: <input type="text" name="filename"><br> <p> <input type="submit" value="File download"> </p> </form> </body> </html> |
Webアプリ起動
以下のコマンドでWebアプリを起動します。
go run main.go
起動後、適当なブラウザから http://127.0.0.1:8080/ にアクセスすれば、下図が表示されます。
ファイル名を入力した後、「File download」をクリックするとサーバからファイルをダウンロードできます。
Google Chrome だと画面左下にダウンロードしたファイルが表示されます。
サーバーに存在しないファイル名を入力するとエラーページが表示されます
まとめ
GoのWebフレームワーク Fiber を活用した簡単なWebアプリ(ファイルダウンローダ)の作り方をソースコード付きで紹介しました。
本記事を通じて、以下を体感してもらえたら嬉しいです。
- Go言語(Golang)すごい!
- Fiber良い!
- Webアプリ作るの楽しい!
以下 Go言語の本紹介。最初の一冊は「みんなのGo言語」がオススメです。