我想从客户端发送一个带有base64编码文件的json字符串,基本上它看起来像这样:
{
"data":"aGVscA==",
"filename":"file.txt"
}
我写了这个结构:
type StoredFile struct {
Data []byte `json:"data"`
Filename string `json:"filename"`
}
然后我将json解码为struct:
decoder := json.NewDecoder(request.Body)
storedFile := StoredFile{}
err := decoder.Decode(&storedFile)
并用gorm保存它:
db.Create(&storedFile)
我的问题是:
-
json包如何将base64字符串解码为字节数组?它是否像普通文本一样对待它,因为我知道当它被编码为base64时,数据大小将增加33%,如果它被视为文本,那么33%的增长仍然是正确的吗?
-
当将[]字节存储到PostgreSQL数据库时,gorm使用什么样的编码?是UTF-8吗?如果没有,我如何将编码设置为UTF-8?
1 回答
是的,它认为你的b64字符串就像纯文本一样,因为它无法知道它是一个基本的64字符串 . 所以是的,你的尺寸增加仍将存在 .
编码取决于表 . 如果gorm只是写入一个已经存在的表,它将使用结构中指定的编码 . 例如:
)ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
对于此表,
CHARSET
是utf8mb4
,因此它将使用UTF-8编码进行存储 .如果gorm也负责创建表,我相信它默认使用
utf8
作为编码,但我似乎无法找到任何支持它的源 .