マルチパート形式のデータを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 [〜#〜] を使用しています
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())