GO+Revelでファイルアップロード

revelで,ファイルアップロード機能を実装している時に,つまづいたので備忘録

/app/file/配下にuploadする

まず,htmlから書いていく

Index.html
{{template "header.html" .}}
{{template "layout.html" .}}

<body>
    <form action="/path/" method="POST" enctype="multipart/form-data">
    <h1>ファイル登録</h1>
            <thead>
                <tr>
                    <th>タイトル</th>
                    <td><input type="text" name="file_name"></td>
                </tr>
                    <th>ファイル</th>
                    <td><input type="file" name="file"></td>
                </tr>
              </thead>
        </table>

    <input type="submit" value="登録">
    </form>
    </body>
 {{template "footer.html" .}}

このIndex.htmlからPOSTで送信される.
以下に,POSTで送信されたfile/app/file/配下にアップロードする手順を書く.

upload.go
func (c Upload) FileUpload(file *os.File) revel.Result {

    // 現在のディレクトリを取得
    pwd, _ := os.Getwd()

    // アップロードしたファイルのファイル名を取得
    fileName := c.Params.Files["file_name"][0].Filename

    ///現在のディレクトリ/fileを作成
    filePATH := filepath.Join(pwd, "file")

    //app配下にfileディレクトリを作成
    if err := os.Mkdir("file", 0777); err != nil {
        fmt.Println(err)
    }

    ///app/file/配下に取得したファイル名でファイルを作成
    uploadedFile, err := os.Create(filePATH + "/" + fileName)
    if err != nil {
        fmt.Println(err)
    }

    //作ったファイルに読み込んだファイルの内容をコピー
    _, err = io.Copy(uploadedFile, file)
    if err != nil {
        panic(err)
    }


    return c.Render()
}

おまけ

取得したfileの拡張子を取得したい時は,
extension := strings.LastIndex(fileName, ".")
でいける.

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.