golangでローカルにファイルサーバ
はじめに
HCB Advent Clendar 2021の19日目を担当するケイタです。
今回はgolangのginでローカルにファイルサーバを構築する方法について紹介します。
環境
macbook pro 2019
golang 1.16.6
コード
contlloer.go
package contller import ( "file-server/pkg/model" "file-server/pkg/view" "fmt" "github.com/gin-gonic/gin" "github.com/google/uuid" "log" "net/http" "os" ) func UploadImage() gin.HandlerFunc { return func(c *gin.Context) { var urls []string form, _ := c.MultipartForm() files := form.File["file"] for _, file := range files { uuID, err := uuid.NewRandom() if err != nil { log.Println("uuid generate is failed") } fileName := fmt.Sprintf("images/%s%s", file.Filename, uuID) err = c.SaveUploadedFile(file, fileName) if err != nil { log.Println("[ERROR] Faild Bind JSON \n ", err) c.JSON(http.StatusBadRequest, "Request is error") view.ReturnErrorResponse( c, http.StatusBadRequest, "Bad Request", "Request is error", ) return } urlName := fmt.Sprintf("/%s%s", file.Filename, uuID) urls = append(urls, urlName) } c.JSON(http.StatusOK, view.UploadResponse(urls)) }
view.go
package view func UploadResponse(urls []string)ImagesUrlResponse { return ImagesUrlResponse{ Urls: urls, } }
リポジトリをこちらに載せておきます リポジトリにはbase64で受け取って格納するのとファイルで受け取り格納する2つの処理を書いています。
終わりに
今回はgolangでローカルにファイルサーバを構築する方法について書きました。今ではS3やfirestoreなどの便利なストレージを使う方が主流かもしれません。自分もよくS3を使っています。 次の記事は、Kei Kimさんが書いてくれる予定なので、お楽しみに!