Как работать с [] байтом (байтовым массивом) с кодировкой base64 в качестве входных данных - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу отправить строку json с файлом в кодировке base64 из клиента, в основном это выглядит так:

{  
   "data":"aGVscA==",
   "filename":"file.txt"
}

И я написал эту структуру:

type StoredFile struct {
    Data     []byte `json:"data"`
    Filename string `json:"filename"`
}

Затем я декодирую JSON в структуру:

decoder := json.NewDecoder(request.Body)
storedFile := StoredFile{}
err := decoder.Decode(&storedFile)

И сохраните его с помощью gorm:

db.Create(&storedFile)

Мой вопрос:

  1. Как пакет json декодирует строку base64 в байтовый массив? Является ли относиться к нему как к простому тексту, потому что я знаю, что размер данных будет увеличивается на 33% при кодировании в base64 и при обработке как текст, 33% -ое увеличение все еще будет там правильно?
  2. Какую кодировку использует gorm, когда сохраняет [] байт для База данных PostgreSQL? Это UTF-8? Если нет, то как мне установить кодировку UTF-8?

1 Ответ

0 голосов
/ 12 сентября 2018
  1. Да, он рассматривает вашу строку b64 как обычный текст, потому что он никак не может знать, что это строка base 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;

Для этой таблицы CHARSET равно utf8mb4, поэтому она будет храниться с использованием кодировки UTF-8.

Если gorm также отвечает за создание таблицы, я считаю, что она использует utf8 по умолчанию в качестве кодировки, но я не могу найти какой-либо источник для ее резервного копирования.

...