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

时间:2018-09-12 04:31:49

标签: json postgresql go go-gorm

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

我的问题是:

  1. json包如何将base64字符串解码为字节数组?可以 将其视为纯文本,因为我知道数据大小为 如果将其编码为base64,则将其增加33% 像文字一样33%的增长还会存在吗?
  2. gorm将[] byte存储到以下位置时会使用哪种编码 PostgreSQL数据库?是UTF-8吗?如果没有,如何将编码设置为UTF-8?

1 个答案:

答案 0 :(得分:1)

  1. 是的,它会将b64字符串视为纯文本,因为无法知道它是64位基本字符串。所以再说一次,您的尺寸增加仍然会存在。

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

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `token_user_id` varchar(255) NOT NULL,
  `is_admin` tinyint(4) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY (email)

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

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

但是,如果gorm也负责创建表,我相信默认情况下它将使用utf8作为编码,但是我似乎找不到任何源来备份它。