在 GO 中将多部分形式的数据读取为 []byte
Read multipart-form data as []byte in GO
我正在使用 GIN 作为 GO 框架,我在上传文件并直接将图像转换为字节时遇到问题,因此我可以将其存储在 db table 中的 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")
我正在尝试像这样将其存储在数据库中
app.SetFile(file)
a.AppStore.Save(app)
它returns这种错误:
cannot use file (type multipart.File) as type []byte
那么如何解决这个问题?我是 Go 语言的新手
注意:我也在为我的数据库 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())
我正在使用 GIN 作为 GO 框架,我在上传文件并直接将图像转换为字节时遇到问题,因此我可以将其存储在 db table 中的 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")
我正在尝试像这样将其存储在数据库中
app.SetFile(file)
a.AppStore.Save(app)
它returns这种错误:
cannot use file (type multipart.File) as type []byte
那么如何解决这个问题?我是 Go 语言的新手
注意:我也在为我的数据库 ORM
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())