首页 文章

如何使用base64编码作为输入处理[] byte(字节数组)

提问于
浏览
0

我想从客户端发送一个带有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 回答

  • 1
    • 是的,它认为你的b64字符串就像纯文本一样,因为它无法知道它是一个基本的64字符串 . 所以是的,你的尺寸增加仍将存在 .

    • 编码取决于表 . 如果gorm只是写入一个已经存在的表,它将使用结构中指定的编码 . 例如:

    创建表用户'(idint(10)unsigned NOT NULL AUTO_INCREMENT,emailvarchar(255)NOT NULL,passwordvarchar(255)NOT NULL,token_user_idvarchar(255)NOT NULL,is_admintinyint(4)NOT NULL DEFAULT'1', PRIMARY KEY(id`),
    独特的钥匙(电子邮件)

    )ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;

    对于此表, CHARSETutf8mb4 ,因此它将使用UTF-8编码进行存储 .

    如果gorm也负责创建表,我相信它默认使用 utf8 作为编码,但我似乎无法找到任何支持它的源 .

相关问题