すぐ影響される 大学院生

昨日とは違う自分を目指して

golangでローカルにファイルサーバ

はじめに

HCB Advent Clendar 2021の19日目を担当するケイタです。

今回はgolangのginでローカルにファイルサーバを構築する方法について紹介します。

環境

コード

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つの処理を書いています。

github.com

終わりに

今回はgolangでローカルにファイルサーバを構築する方法について書きました。今ではS3やfirestoreなどの便利なストレージを使う方が主流かもしれません。自分もよくS3を使っています。 次の記事は、Kei Kimさんが書いてくれる予定なので、お楽しみに!