前提・実現したいこと
Go言語で画像をアップロードして表示しようとしていましたが、表示の仕方が分かりません。
一度アップロードした写真はダウンロードされてそれを表示しようかと考えております。
└─
├─cmd
│ └─main.go
├─internal
│ └─http
│ └─api.go
│ └─server.go
├─templates
│ └─index.html
│ └─show.html
└─img
該当のソースコード
go
1func Run() { 2 e := echo.New() 3 // リクエストIDの設定 4 e.Use(middleware.RequestID()) 5 // loggerの設定 6 e.Use(middleware.Logger()) 7 // recoverの設定 8 e.Use(middleware.Recover()) 9 10 //TODO what's? "message": "no matching operation was found" 11 //// validator 12 //spec, err := gen.GetSwagger() 13 //if err != nil { 14 // panic(err) 15 //} 16 //e.Use(middleware2.OapiRequestValidator(spec)) 17 18 e.Static("/", "templates") 19 e.POST("/upload", upload) 20 e.GET("/show", show) 21 e.Logger.Fatal(e.Start(":1232")) 22} 23
go
1func show(c echo.Context) error { 2 files, _ := ioutil.ReadDir("img") 3 for _, f := range files { 4 fmt.Println(f.Name()) 5 } 6 return c.HTML(http.StatusOK, "OK") 7} 8
html
1<html> 2 3<head> 4 <title>Test</title> 5</head> 6 7<body> 8 <!---{{template "content" .}}---> 9 <form action="/upload" method="POST" enctype="multipart/form-data"> 10 Name: <input type="text" name="name"><br> 11 Description: <input type="text" name="discription"><br> 12 File: <input type="file" name="files" multiple><br><br> 13 <input type="submit" value="Submit"> 14 </form> 15 <a href='show.html'>画像一覧</a> 16</body> 17 18</html>
表示するHTMLを追加しました。
html
1<!DOCTYPE html> 2<html> 3 4<head> 5 <meta charset="utf-8"> 6 <title>画像をある分だけ表示する</title> 7</head> 8 9<body> 10 <img src="/img/sample.png"> 11</body> 12 13</html>
uploadのコードは以下です。
Go
1func upload(c echo.Context) error { 2 // Read form fields 3 name := c.FormValue("name") 4 discription := c.FormValue("discription") 5 6 //------------ 7 // Read files 8 //------------ 9 10 // Multipart form 11 form, err := c.MultipartForm() 12 if err != nil { 13 return err 14 } 15 files := form.File["files"] 16 17 for _, file := range files { 18 // Source 19 src, err := file.Open() 20 if err != nil { 21 return err 22 } 23 defer src.Close() 24 25 // Destination 26 dst, err := os.Create("img/" + file.Filename) 27 if err != nil { 28 return err 29 } 30 defer dst.Close() 31 32 // Copy 33 if _, err = io.Copy(dst, src); err != nil { 34 return err 35 } 36 } 37 38 return c.HTML(http.StatusOK, fmt.Sprintf("<p>Uploaded successfully %d files with fields name=%s and discription=%s.</p>", len(files), name, discription)) 39}
補足情報(FW/ツールのバージョンなど)
Windows10,VScode,Chrome
フレームワークはechoを使っています。
初心者のため至らぬところがありましたらどうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー