web-dev-qa-db-ja.com

マルチパート形式のデータをGOで[]バイトとして読み取ります

[〜#〜] gin [〜#〜] をGOフレームワークとして使用しています。ファイルをアップロードするときに問題が発生し、画像をバイトとして直接変換して、db内のBLOBフィールドに保存できるようにします。テーブルなので、次のようなコードがあります:

func (a *AppHandler) Upload(ctx *gin.Context) {

form := &struct {
    Name    string `form:"name" validate:"required"`
    Token   string `form:"token" validate:"required"`
    AppCode string `form:"app_code" validate:"required"`
}{}
ctx.Bind(form)
if validationErrors := a.ValidationService.ValidateForm(form); validationErrors != nil {
    httpValidationErrorResponse(ctx, validationErrors)
    return
}

file, header, err := ctx.Request.FormFile("file")

そして私はそれをこのようにdbに保存しようとしています

app.SetFile(file)
a.AppStore.Save(app)

そしてそれはこの種のエラーを返します:

cannot use file (type multipart.File) as type []byte 

だからこれを修正する方法は? Go言語でかなり新しいim
注:データベースORMにも [〜#〜] gorm [〜#〜] を使用しています

8
Aji Tirta

multipart.Fileはio.Readerインターフェースを実装しているため、その内容を次のようにbytes.Bufferにコピーできます。

file, header, err := ctx.Request.FormFile("file")    
defer file.Close()
if err != nil {
    return nil, err
}

buf := bytes.NewBuffer(nil)
if _, err := io.Copy(buf, file); err != nil {
    return nil, err
}

次に、アプリに追加します

app.SetFile(buf.Bytes())
10
Steve C